双色球统计1-33个数字出现的次数(很详细)
做这个题一定要注意审题:题目要求是统计1-33个数字出现的次数,而不是前六个数字出现的次数
算法设计:
①:用一个数组p1来保存每一行的数据,再用一个数组p2来遍历1-33个数字,因为是要统计这33个数字出现的次数所以将数组初始化为0,
②:通过初始化同一个变量来保存(0-32个数字),然后再将这个变量作为p2数组的下标,实现同一个下标相加的时候就是在确定该数出现的次数
③:怎么确定变量的值,就是用数组p1的值减1就可以作位变量的值,(因为数组p1是1-33个数组的随机值,所以他减1就是在设置1-33个数据的下标)然后再遍历p1这个数组的时候,就可以为变量重复赋值
运行的结果:
注:出现的结果中第一个球,并不是文件中的第一个数字,而是值为1的数字
#include <iostream>
#include <assert.h>
#include <fstream>
#include <string>
using namespace std;
#define NUM 7
bool statius(const char* path, int* ball_33, int len) {
int ball_7[NUM];//用一个数组p1来保存每一行的数据,
ifstream file;
file.open(path);
if (!path){
return false;
}
if (file.fail()){
cerr << "文件打开错误!" << strerror(sizeof(file)) << endl;
}
do{
int i;
for (i = 0; i < NUM; i++) {
file >> ball_7[i];
if (file.eof()) {
break;
}
if (file.fail()) {
cerr << "数据读取失败!" << strerror(errno) << endl;
break;
}
}
if (i == 0)break;
if (i < NUM) {
cout << "不满预计的7个数" << endl;
continue;
}
for (i = 0; i < NUM; i++) {
cout << ball_7[i]<<" ";
}
cout << endl;
for (int i = 0; i < NUM; i++){//循环为变量赋值
//就是用数组p1的值减1就可以作位变量的值,(因为数组p1是1-33个数组的随机值,所以他减1
//就是在设置1-33个数据的下标)然后再遍历p1这个数组的时候,就可以为变量重复赋值
int index = *(ball_7 + i)-1;
if (index >= 0 && index < len) {
//通过初始化同一个变量来保存(0-32个数字),然后再将这个变量作为p2数组的下标,实
//现同一个下标相加的时候就是在确定该数出现的次数
*(ball_33 + index) += 1;//用变量作为数组p2的下标
}
}
} while (1);
file.close();
return true;
}
int main(void) {
string filename;
//再用一个数组p2来遍历1-33个数字,因为是要统计这33个数字出现的次数所以将数组初始化为0,
int ball_33[33] = { 0 };
cout << "please input you filename:" << endl;
cin >> filename;
//将文件名传入函数
if (!statius(filename.c_str(), ball_33, 33)) {
cerr << "统计错误!" << endl;
exit(-1);
}
for (int i = 0; i < 33; i++)
{
cout <<"第"<<i+1<<"个球出现的次数:" << *(ball_33 + i) << " " << endl;
}
return 0;
}
实现含有中文字符的字符串逆转,如: “我是小萌新” 转换成“新萌小是我”
#include <iostream>
using namespace std;
/*
1. 实现含有中文字符的字符串逆转,如: “我是小萌新” 转换成“新萌小是我”
*/
int main(void) {
string str = "我是小萌新";
int len = str.length();
cout << str << endl;
for (int i = 0; i < str.length() / 2; i += 2, len -= 2) {
int ret = str[i];
str[i] = str[len - 2];
str[len - 2] = ret;
ret = str[i + 1];
str[i + 1] = str[len - 1];
str[len - 1] = ret;
}
cout << str << endl;
return 0;
}
有一个整形数组, a[3] = {7,2,5}, 要求使用指针实现数组成员由小到大的顺序排列,即 结果为:a[3] = {2,5,7};
#include <iostream>
using namespace std;
/*
有一个整形数组, a[3] = {7,2,5}, 要求使用指针实现数组成员由小到大的顺序排列,
即 结果为:a[3] = {2,5,7};
*/
int main(void) {
int a[3] = { 7,2,5 };
for (int i = 0; i < sizeof(a)/sizeof(int); i++){
for (int j = 0; j < sizeof(a) / sizeof(int); j++)
{
if (a[i] < a[j]) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
for (int i = 0; i < sizeof(a) / sizeof(int); i++)
{
cout << a[i] << " ";
}
return 0;
}
实现一个函数,函数完成如下功能:
1.函数的输入为一个数组,数组的成员个数不定(即:可能为 0 个,也可能为多个)
2.函数找到成员的最大元素和最小元素,并能让函数的调用者知道最大元素和最小元素
是哪一个
#include <iostream>
using namespace std;
/*
实现一个函数,函数完成如下功能:
1.函数的输入为一个数组,数组的成员个数不定(即:可能为 0 个,也可能为多个)
2.函数找到成员的最大元素和最小元素,并能让函数的调用者知道最大元素和最小元素
是哪一个
*/
void select(int a[] ,int len,int **max,int **min) {
for (int i = 0; i < len; i++) {
for (int j = 0; j < len; j++)
{
if (a[i] < a[j]) {
int tmp = a[i];
a[i] = a[j];
a[j] = tmp;
}
}
}
*max = &a[len-1];
*min = &a[0];
}
int main(void) {
int arr[] = { 1,3,2,1,2,3,4,5,6,8,0,4,1 };
int* max = NULL;
int* min = NULL;
int len = sizeof(arr) / sizeof(int);
select(arr, len, &max, &min);
cout << "最大值:" << *max << " 最小值:" << *min;
return 0;
}
实现一个函数,使用指针连接两个字符串。
函数输入: 两个源字符串的指针,目的字符串的指针
#include <iostream>
using namespace std;
/*
实现一个函数,使用指针连接两个字符串。
函数输入: 两个源字符串的指针,目的字符串的指
int extern_a = 10;
*/
int cat(char * str,char *str1, char* p[]) {
int i = 0;
int k = 0;
while (str[i]!=0){
p[i] = &str[i];
i++;
}
while (str1[k]!=0){
p[i] = &str1[k];
i++;
k++;
}
for (int i = 0; i < sizeof(p)/sizeof(char); i++) {
cout << *p[i];
}
int len = sizeof(p) / sizeof(char);
return len;
}
int main(void) {
char str[50];
char str1[50];
char str2[100];
char* p[100];
for (int i = 0; i < 100; i++){
p[i] = &str2[i];
}
cout << "请输入第一个字符串:" << endl;
cin >> str;
rewind(stdin);
cout << "请输入第二个字符串:" << endl;
cin >> str1;
int len = cat(str, str1, p);
cout << endl;
for (int i = 0; i < len; i++) {
cout << *p[i];
}
return 0;
}