PAT考试乙级1050(C语言实现) (重点题目)(memset以及思路)
2017-11-28 19:36
393 查看
#include<cstring> #include<iostream> #include<algorithm> using namespace std; int main(){ int num=0,i=0,j=0,m=0,n=0,min,k=0; int a[10005]; scanf("%d",&num); min=num; for(i=0;i<num;i++){ scanf("%d",&a[i]); } sort(a,a+num,greater<int>()); //printf("%d",a[1]); for(i=0;i<=num;i++){ for(j=0;j<=i;j++){ if(i*j==num&&(i-j)<min){ min=i-j; m=i; n=j; } } } //printf("%d %d\n",m,n); int s[m] ;//二维数组作为螺旋矩阵 memset(s,0,sizeof(s)); i=0;j=0;k=0; //一定要恢复初始值!!!!!不然全错! s[i][j]=a[k++]; while(k<num){ while(j+1<n&&!s[i][j+1]) //右 s[i][++j]=a[k++]; while(i+1<m&&!s[i+1][j]) //下 s[++i][j]=a[k++]; while(j-1>=0&&!s[i][j-1]) //左 s[i][--j]=a[k++]; while(i-1>=0&&!s[i-1][j]) //上 s[--i][j]=a[k++]; } for(i=0;i<m;i++){ for(j=0;j<n;j++){ if(j!=0) printf(" "); printf("%d",s[i][j]); } printf("\n"); } return 0; }
代码参考:
http://blog.csdn.net/wanmeiwushang/article/details/51598869
总结:
1、核心代码是中间的二重循环,注意是循环,所以每次分支的循环结束后,改行/列赋值完成。
2、注意代码注释。
3、同样用到了menset,就是快速把二重数组的每个元素都赋值为0。
4、原来的编译器还是无法通过其中的一些语句,换了个ADT才解决,Microsoft Visual C++ 2010 Express啥情况啊,.cpp都无法编译成功。
相关文章推荐
- PAT考试乙级1048(C语言实现)重点题目(思路、用到了memset)
- PAT考试乙级1050(C语言实现) (重点题目)(关于保留小数的坑)
- PAT考试乙级1045(C语言实现)重点题目(思路)
- PAT考试乙级1050(C语言实现) (重点题目)(按格式读取,使用容器vector)
- PAT考试乙级1054(C语言实现) (重点题目)(思路)
- PAT考试乙级1024(C语言实现)重点题目
- PAT考试乙级1055(C++语言实现) (重点题目)(思路)
- PAT考试乙级1030(C语言实现)重点题目
- PAT考试乙级1033(C语言实现)重点题目 部分正确(已解决)
- PAT考试乙级1034(C语言实现)重点题目
- PAT考试乙级1031(C语言实现)重点题目
- PAT考试乙级1028(C语言实现)重点题目
- PAT考试乙级1019(C语言实现) 重点题目
- PAT考试乙级1035(C语言实现)重点题目(排序)
- PAT考试乙级1039(C语言实现)
- PAT考试乙级1040(C语言实现)
- PAT考试乙级1027(C语言实现)
- PAT考试乙级1017(C语言实现)
- PAT考试乙级1008(C语言实现)
- PAT考试乙级1037(C语言实现)