题目:已知一个不透明的布袋里装有红、蓝、黄、绿、紫同样大小的圆球各一个,现从中一次抓出两个,问可能抓到的是什么颜色的球?提问1:以下是2种解法,请分析2种算法的存储结构差别在哪里? 提问2:如果对颜色再次进行排序,哪种存储方法,排序效率快,说明原因。 提问3:解法3采用动态分配内存,比解法2的存储方法好在哪里? //解法1 #include<stdio.h>int main(void){ char color[5][10] = {"red", "blue", "yellow", "green", "purple"}; /* 初始化 */ int count = 0, i, j; for(i = 0; i <= 3; i++) /* i代表第一个球对应的颜色下标 */ for(j = i+1; j <= 4; j++) { /* j代表第二个球对应的颜色下标 */ count ++; printf("%6d", count); printf("%10s %10s\n", color[i], color[j]); } return 0;} //解法2 #include<stdio.h> int main(void) { char *color[5] = {"red", "blue", "yellow", "green", "purple"}; /* 初始化 */ int count = 0, i, j; for(i = 0; i <= 3; i++) /* i代表第一个球对应的颜色下标 */ for(j = i+1; j <= 4; j++) { /* j代表第二个球对应的颜色下标 */ /* 两个球不能同色 */ count ++; printf("%6d", count); printf("%10s %10s\n", color[i], color[j]); } return 0; } //解法3 int main(void) { int i, n = 0; char * color[5], str[10]; printf("请输入一个球颜色名称,每行一个,#结束输入:\n"); scanf("%s", str); while(str[0] != '#') { color[n] = (char *) malloc ( sizeof (char) * ( strlen(str) + 1 ) ); strcpy(color[n], str); n++; scanf("%s", str); } printf("你输入的颜色是:"); for(i = 0; i < n; i++) printf("%s ", color[i]); return 0; }
时间: 2023-05-11 09:04:23 浏览: 110
解法1:将5个球的颜色分别用数字1-5表示,用一个长度为5的数组存储每种颜色球的数量,每次抽取两个球后,将对应的数组元素减1,判断两个数字是否相同,相同则为同色球,不同则为异色球。
解法2:将5个球的颜色分别用字符串表示,用一个长度为5的数组存储每种颜色球的数量,每次抽取两个球后,将对应的数组元素减1,判断两个字符串是否相同,相同则为同色球,不同则为异色球。
解法1和解法2的存储结构差别在于,解法1使用数字表示颜色,解法2使用字符串表示颜色。
如果对颜色再次进行排序,解法1的存储方法排序效率更快,因为数字可以直接比较大小,而字符串需要进行字典序比较。
解法3采用动态分配内存,可以根据实际需要动态调整存储空间,避免了浪费空间的问题,同时也可以避免存储空间不足的问题。相比解法2的静态数组存储方法,解法3更加灵活和高效。
阅读全文