题目是创建一个多维数组,3行5列,从1到90之间的数字。相当于一个表格。设计一个程序,要求当从键盘输入数字时,搜索数组中是否有一样的,有则提取出来,然后用另一个数组来储存,提取的数不记在数组中重复了多少次,当数组中的数都被取出后,结束程序,当然还有一种情况,当输入的数字是0的时候直接跳出程序。然后继续查找与输入相符合的数值,直到所有的数值都被取完。
老师还给出一个建议,创建一个贝尔值的数组只有0和1值,用来代表那些已经被取出的数字。
一道外国的题目,有电脑高手帮忙解决一下的嘛?
题目是创建一个多维数组,3行5列,从1到90之间的数字。相当于一个表格。设计一个程序,要求当从键盘输入数字时,搜索数组中是否有一样的,有则提取出来,然后用另一个数组来储存,提取的数不记在数组中重复了多少次,当数组中的数都被取出后,结束程序,当然还有一种情况,当输入的数字是0的时候直接跳出程序。然后继续查找与输入相符合的数值,直到所有的数值都被取完。
老师还给出一个建议,创建一个贝尔值的数组只有0和1值,用来代表那些已经被取出的数字。
一道外国的题目,有电脑高手帮忙解决一下的嘛?
蛋痛的C语言 - -!还好我没学……
直接用OOP思想来设计就简单多了……
#include <time.h>
// 定义数组维数 // 行数 #define VS_X_MAX 3 // 列数 #define VS_Y_MAX 5
// 存放原始数据的数组 int g_iOriValueStack[VS_X_MAX][VS_Y_MAX]; // 用于标记原始数据数组中的值是否已被输入,0为未输入,1为已输入 int g_bOriValueMark[VS_X_MAX][VS_Y_MAX];
// 比较输入数所,找到满足的,返回1,否则返回0 int CheckInputValue(int iValue) { int i, j;
// 检测是否在原始数组中存在 for (i = 0; i < VS_X_MAX; i++) { for (j = 0; j < VS_Y_MAX; j++) { // 如果该位置数据已输入过,则跳过比较此位置数字 if (g_bOriValueMark[i][j] == 1) { continue; } else { // 如果找到相同数字,将标志置为1 if (g_iOriValueStack[i][j] == iValue) { g_bOriValueMark[i][j] = 1; // 找到 return 1; } } } }
// 未找到 return 0; }
// 检测是否已全部输入,1表示已全部输入 int IsAllInputed() { int i, j;
// 检测是否已全部输入 for (i = 0; i < VS_X_MAX; i++) { for (j = 0; j < VS_Y_MAX; j++) { // 如果该位置数据未输入过,则返回0 if (g_bOriValueMark[i][j] != 1) // 未全部输入 return 0; } }
// 全部输入 return 1; }
int _tmain(int argc, _TCHAR* argv[]) {
// 初始化随机数产生器 //srand((unsigned)time(NULL));
int i, j, k = 0; int a = 0; // 初始化原始数据数组,填充方法可以按需要重写 for (i = 0; i < VS_X_MAX; i++) { for (j = 0; j < VS_Y_MAX; j++) { // 产生个随机数,范围1-90 //g_iOriValueStack[i][j] = rand()%89+1;
// 或者是有规律填充 if (k > 90 || k < 1) k = 1; g_iOriValueStack[i][j] = k++;
// 或者是手动输入 //printf("请输入第%d行,第%d列的数:", i, j); //scanf("%d", &k); //if (k < 1) // k = 1; //if (k > 90) // k = 90; //g_iOriValueStack[i][j] = k; } }
// 初始化原始数据数组标记 memset(g_bOriValueMark, 0, sizeof(g_bOriValueMark));
// 循环输入,输入-1时退出程序,输入1-90时检测数组,输入其它值时,重新输入检测 while (1) {
// 显示产生的原始数组 printf("初始数组为:\n"); for (i = 0; i < VS_X_MAX; i++) { for (j = 0; j < VS_Y_MAX; j++) { printf("%d ", g_iOriValueStack[i][j]); } printf("\n"); } // 显示已输入状态 printf("输入状态:\n"); for (i = 0; i < VS_X_MAX; i++) { for (j = 0; j < VS_Y_MAX; j++) { printf("%d ", g_bOriValueMark[i][j]); } printf("\n"); }
// 输入 printf("请输入:"); scanf("%d", &a);
// 如果输入-1,退出程序 if (a == -1) return 0;
k = CheckInputValue(a); if (k == 1) { printf("找到该数\n\n"); // 找到数后,检测是否已全部输入过 if (IsAllInputed() == 1) { char cWait; // 全部输入 printf("恭喜你,已全部输入!!输入任意字符退出..."); // 吸收最后一个回车 scanf("%c", &cWait); // 等待按键 scanf("%c", &cWait); return 0; } } else printf("很遗憾,没有找到该数\n\n");
}
return 0;
}
#include<stdio.h> int main() { int a[3][5],b[15],i,j,k=0,num; int c[3][5]; for(i=0;i<3;i++) { for(j=0;j<5;j++) { a[i][j]=(j+1)+i*5; c[i][j]=0; } } printf("请输入数据(0,1-90):"); scanf("%d",&num); getchar(); while(num!=0) { for(i=0;i<3;i++) { for(j=0;j<5;j++) { if(c[i][j]==0) { j=6; break; } } if(j==6) { i=4; break; } } if(i==3) { printf("数字都被取出!"); break; } for(i=0;i<3;i++) { for(j=0;j<5;j++) { if(a[i][j]==num) { if(c[i][j]!=1) b[k++]=num;
c[i][j]=1; printf("%d 在数组中\n",num); j=6; break; } } if(j==6) { i=4; break; } } if(i==3) { printf("%d不在数组中\n",num); } printf("请输入数据(0,1-90):"); scanf("%d",&num); getchar(); }
return 0; }