PAT考试乙级1050(C语言实现) (重点题目)(memset以及思路)

来源:互联网 发布:python调用exe程序 编辑:程序博客网 时间:2024/05/17 21:53
#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][n];//二维数组作为螺旋矩阵     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都无法编译成功。

阅读全文
0 0
原创粉丝点击