伊蕾娜爱编程 2021-12-01 15:25 采纳率: 100%
浏览 17
已结题

scanf("%d", &s[i][(j + m)%n]);这句话什么意思

问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
运行结果及报错内容
我的解答思路和尝试过的方法
我想要达到的结果

#include <stdio.h>

int main(){

int m, n,i,j;
scanf("%d %d", &m, &n);

int s[n][n];
for(i = 0; i <= n - 1; i++)
    for(j = 0; j <= n - 1; j++)
        scanf("%d", &s[i][(j + m)%n]);

for( i = 0; i <= n - 1; i++) {
    for(j = 0; j <= n - 1; j++) {
        if( j <= n - 2 )
            printf("%d ", s[i][j]);
        else
            printf("%d \n", s[i][j]);
    }
}
return 0;

}
这个代码是怎么实现将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。的,我不太懂

  • 写回答

1条回答 默认 最新

  • bekote 2021-12-01 15:37
    关注

    i是行坐标,j是列坐标,所以向右移动m只要j+m,假设n=5,m=1,在最后一个元素下标4向右移时会超出到5的位置,实际上它应该是移动第一个位置也就是j=0的地方,所以(j+m)%n,%n能保证使得超出的从第一个位置往右移

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月9日
  • 已采纳回答 12月1日
  • 创建了问题 12月1日

悬赏问题

  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件
  • ¥15 有赏,i卡绘世画不出
  • ¥15 如何用stata画出文献中常见的安慰剂检验图
  • ¥15 c语言链表结构体数据插入
  • ¥40 使用MATLAB解答线性代数问题
  • ¥15 COCOS的问题COCOS的问题
  • ¥15 FPGA-SRIO初始化失败