1.折线输出
思路 :每一路线上,坐标r+c相等,因此遍历数组,一旦找到相等的这个值就输出停止。
for(int sum=0;sum<r+c-1;sum++){
for(i = 0;i<r;i++){
for(j = 0;j<c;j++){
if(i+j==sum){
cout<<a[i][j]<<endl;
break;
}
}
}
}
2.蛇形输出
int n;
cin>>n;
int i=1,j=1,num=1;//初始位置
//构造数组
while(num<=n*n){
while(1){//向右上走
if(i<1||j>n){
i++;
j--;
break;
}else{ //不出界
a[i][j] = num;
num++;
i--;
j++;
}
}
if(j==n){
i++;
}else if(i==1){
j++;
}
while(1){//向左下走
if(i>n||j<1){//不出界
j++;
i--;
break;
}
else{
a[i][j]=num;
num++;
i++;
j--;
}
}
if(i==n) j++;
else if(j==1) i++;
}
//输出.....
3.回形输出
int r,c;
cin>>r>>c;
int i,j;
//构造数组
for(i = 1;i<=r;i++){
for(j = 1;j<=c;j++){
cin>>a[i][j];
}
}
//将cnt数组边界赋值-1;用来判断能否继续前进。
for(i = 0;i<=r+1;i++){
for(j = 0;j<=c+1;j++){
if(i==0||j==0||i==r+1||j==c+1)
cnt[i][j] = -1;
}
}
//输出
int x=1,y=1;//坐标
int dx[4] = {0,1,0,-1},dy[4] = {1,0,-1,0},k;
for(i = 1;i<=r*c;i++){
cout<<a[x][y]<<endl;
cnt[x][y] = -1;//输出当前元素后将其cnt对应的元素赋值为-1,表示不能走
if(cnt[dx[k]+x][dy[k]+y]!=0){ //如果当前元素的下一个元素对应的cnt的值为-1,说明到边界了。
k = (k+1)%4; //此时k++,但是不能超过4 所以%4;
}
x += dx[k];
y += dy[k];
}