for(i=0;i<5;i++) if(a[i]==3) index=i;//因而记下3所在数组的下标,则a[index]就是所要找的数了
int i; 从左到右查找第一个比6大的数,记下它的下标index; for(i=9;i>index;i--) { a[i]=a[i-1]; } a[index]=x;
作法:利用for循环从后面往前面赋值,最后在a[index]的位置赋予x的值,实现数组数据的插入。数组
for(i=0;i<5;i++) if(a[i]==3)//找出3所在数组的下标 index=i;//记下下标 for(i=index;i<4;i++) { a[i]=a[i+1]; }//使a[index]赋值为下一位,而后执行循环使下一位赋值为下下一位;从而删除3这个数据,保留其余数据的数字的顺序 for(i=0;i<4;i++) printf("%d"a[i]); //在使用数组的时候,因为删除了一位数字,因此从新输出或者使用的时候,记得减小数组的一个长度,因此有i<4而不是i<5
二、伪代码(利用另外一个数组):函数
int i=0;j=0; for(i=0;i<5;i++) if(a[i]==3)//找出3所在数组的下标 index=i;//记下下标 while(j!=5)//这里若是数组长度为n,则将5改成n便可 { if(i!=index)b[i++]=a[j++]; else {j++} }
这样子就获得了删除3这个数字后剩余数字不变的数字b了,这种方法能够保留a这个数组,获得新的数组,不过比第一种方法麻烦一点,有时候会显得不必。学习
for(i=1;i<n;i++)//外循环n-1次 { for(j=0;j<n-1-i;j++) { 判断a[j]>a[j+1],是的话交换a[j]与a[j+1]; }//内循环结束后,将有一个最大值“沉”到未排序的最下面 }
两层循环后便可获得有序的重构数组a[];
二、选择法(先选择最大的,而后按照顺序排下来):
这里也是要用到两层循环测试
for(i=1;i<n;i++) { for(j=0;j<n-i;j++) { 若是a[MaxIndex]<a[j];则交换Max与j; //历遍数组,找出最大的值所在下标 } 交换a[MaxIndex]与a[n-i]; //将最大的元素与(未排序)下标最大的数组元素交换 }
两层循环后便可获得有序的重构数组a[];调试
数组作枚举用法:code
哈希数组用法:blog
这两周的代码量:884行排序
for(k=0;k<5;k++)//控制螺旋赋值的次数 { i = 0, j = 0;//从新赋值行、列 for(j = 0+k; j < n-k; j++)//控制赋值的数量 { 从左到右赋值方阵第一行; } for(i = 1+k; i <n-k; i++)//控制赋值的数量 { 从上到下赋值最后一列; } for(j = n - 2-k; j >= 0+k; j--)//控制赋值的数量 { 从右到左赋值最后一行; } for(i = n - 2-k; i >= 1+k; i--)//控制赋值的数量 { 从下到上赋值第一列; } } 利用循环,输出二维数组a[i][j]
输入数据 | 输出数据 | 说明 |
---|---|---|
2 | ![]() |
恰好围成一圈 |
4 | ![]() |
普通的一个数据 |
9 | ![]() |
临界最大的数据 |
这道题遇到了2个问题,均在VS上调试完成
本题采用了一个for里面4个for螺旋式地给2个行2个列赋值的方法字符串