思路一:用二维数组,输入的条件是:已经输入的数小于等于N*N,输入的截止条件是:(i=N,j>N)。
思路二:先用一维数组,然后转二维数组输出。
思路一--------------------------------------------------------------------- #include <iostream> #include <cmath> #include <cstring> using namespace std; int main() { int N; cin>>N; int n; cin>>n; int a[201][201]; int i=1,j=1; int sign=0; while(1){ if(j>N){ i++; } for(;i<=N;i++){ if(j>N){ j=1; } for(;j<=N;j++){ if(n==0){ break; } a[i][j]=sign%2; n--; if(n==0){ j++; break; } } if(n==0){ break; } } sign++; if(i==N&&j>=N){ break; }else{ cin>>n; } } for(int p=1;p<=N;p++){ for(int q=1;q<=N;q++){ cout<<a[p][q]; } cout<<endl; } return 0; }
思路二--------------------------------------------------------------------------------------------------------------------
#include <iostream> #include <cmath> #include <cstring> using namespace std; int main() { int N; cin>>N; int n; cin>>n; int a[40001]; int sign=0; //标记当前需要输入的数 for(int i=1;i<=N*N;i++){ if(n==0){ sign=(sign+1)%2; cin>>n; i--; continue; } while(n!=0){ a[i]=sign; n--; i++; } if(i<N*N){ cin>>n; } i--; sign=(sign+1)%2; } for(int j=1;j<=N*N;j++){ cout<<a[j]; if(j%N==0){ cout<<endl; } } return 0; }