二维数组的“奇怪”输出

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];
    }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值