|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
//给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。
//此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。
//示例:
//输入: [2,0,2,1,1,0,2,1,0,1,0,2]
//输出: [0,0,0,0,1,1,1,1,2,2,2,2]
- #include<stdio.h>
- int main()
- {
- int sort(int *p,int n);
- int i,k,n,*p,a[n];
- scanf("%d",&n);
- getchar();
- for(i = 0;i < n;i++)
- {
- scanf("%d",&a[i]);
- }
- p = a;
- k = sort(p,n);
- printf("\n");
- return 0;
- }
- int sort(int *p,int n)
- {
- int i,j,k = 0,count1 = 0,count2 = 0,count3 = 0;
- int temp[3][9];
- for(i = 0;i < n;i++)
- {
- if(*(p + i) == 0)
- {
- temp[0][count1] = 0;
- count1 += 1;
- }
- else if(*(p + i) == 1)
- {
- temp[1][count2] = 1;
- count2 += 1;
- }
- else
- {
- temp[2][count3] = 2;
- count3 += 1;
- }
- }
- temp[0][count1] = 88; // 设置元素终止符为数字88
- temp[1][count2] = 88;
- temp[2][count3] = 88;
- for(j = 0;j < 3;j++)
- {
- for(i = 0;temp[j][i] != 88;i++)
- {
- if(temp[j][i] != 88)
- {
- *(p + k) = temp[j][i];
- printf("%d ",*(p + k));
- k++;
- }
- }
- }
- printf("\n");
- return 0;
- }
复制代码
此程序 DEV_C++5.11 编译通过,却又不能执行,但将第6行定义数组的 n 改为12,整个程序运行正常,请问该如何修改?
本帖最后由 风过无痕1989 于 2020-10-27 19:30 编辑
受楼上巴巴鲁朋友的启发,修改一下数组 a[n] 的定义位置,程序运行正常。其实在此位置的 a[n] 数组已经不是一个彻头彻尾的变长数组了,它有了具体的元素个数
- #include<stdio.h>
- int main()
- {
- int sort(int *p,int n);
- int i,k,n,*p;
- scanf("%d",&n);
- getchar();
- int a[n];
- for(i = 0;i < n;i++)
- {
- scanf("%d",&a[i]);
- }
- p = a;
- k = sort(p,n);
- printf("\n");
- return 0;
- }
- int sort(int *p,int n)
- {
- int i,j,k = 0,count1 = 0,count2 = 0,count3 = 0;
- int temp[3][n]; // 这里有一个不算大的错误,原定义为 temp[3][9],还是改成 n 好,与主数组长度保持一致
- for(i = 0;i < n;i++)
- {
- if(*(p + i) == 0)
- {
- temp[0][count1] = 0;
- count1 += 1;
- }
- else if(*(p + i) == 1)
- {
- temp[1][count2] = 1;
- count2 += 1;
- }
- else
- {
- temp[2][count3] = 2;
- count3 += 1;
- }
- }
- temp[0][count1] = 88; // 设置元素终止符为数字88
- temp[1][count2] = 88;
- temp[2][count3] = 88;
- for(j = 0;j < 3;j++)
- {
- for(i = 0;temp[j][i] != 88;i++)
- {
- if(temp[j][i] != 88)
- {
- *(p + k) = temp[j][i];
- printf("%d ",*(p + k));
- k++;
- }
- }
- }
- printf("\n");
- return 0;
- }
复制代码
|
|