鱼C论坛

 找回密码
 立即注册
查看: 1745|回复: 2

[已解决]回型矩阵问题

[复制链接]
发表于 2023-10-9 12:17:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目链接:https://ac.nowcoder.com/acm/contest/19306/1026?&headNav=acm
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int a[22][22];
  4. int main()
  5. {
  6.     int n,s=1,r=1,l=1,now=2;
  7.     a[l][r]=1;
  8.     cin>>n;
  9.     while(now<=n*n)
  10.     {
  11.         while(a[l][r+1]==0&&r+1<=n)
  12.         {
  13.             a[l][r++]=now++;
  14.         }
  15.         while(a[l+1][r]==0&&l+1<=n)
  16.         {
  17.             a[l++][r]=now++;
  18.         }
  19.         while(a[l][r-1]==0&&r-1>=0)
  20.         {
  21.             a[l][r--]=now++;
  22.         }
  23.         while(a[l--][r]==0&&l-1>=0)
  24.         {
  25.             a[l--][r]=now++;
  26.         }
  27.         
  28.     }
  29.     for(int i=1;i<=n;i++)
  30.     {
  31.         for(int j=1;j<=n;j++)
  32.         {
  33.             cout<<a[i][j]<<" ";
  34.         }
  35.         cout<<endl;
  36.     }
  37.    
  38.         

  39.    
  40. }
复制代码

指正哪个地方错了,输出哪个4到5 的时候不是有一个空格吗,那个位置该怎么解决呢
最佳答案
2023-10-9 12:18:05
在这段代码中,输出4和5之间缺少了一个空格的问题可以通过在输出数字后判断是否为最后一个数字,如果不是则输出一个空格来解决。具体代码实现如下:

  1. for(int i=1;i<=n;i++)
  2. {
  3.     for(int j=1;j<=n;j++)
  4.     {
  5.         cout<<a[ i][j];
  6.         if(j!=n) // 判断是否为最后一个数字
  7.             cout<<" "; // 如果不是最后一个数字,则输出一个空格
  8.     }
  9.     cout<<endl;
  10. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-10-9 12:18:05 | 显示全部楼层    本楼为最佳答案   
在这段代码中,输出4和5之间缺少了一个空格的问题可以通过在输出数字后判断是否为最后一个数字,如果不是则输出一个空格来解决。具体代码实现如下:

  1. for(int i=1;i<=n;i++)
  2. {
  3.     for(int j=1;j<=n;j++)
  4.     {
  5.         cout<<a[ i][j];
  6.         if(j!=n) // 判断是否为最后一个数字
  7.             cout<<" "; // 如果不是最后一个数字,则输出一个空格
  8.     }
  9.     cout<<endl;
  10. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-10-9 12:18:14 | 显示全部楼层
这份代码中输出的确存在问题,当第4行第5列的数为两位数时,其余位置会多一个空格,而该位置没有空格。可以通过以下方式进行调整:

在输出时,可以通过判断当前数字位数来决定是否输出空格。如果当前数字为一位数,那么在输出后再输出一个空格;如果当前数字为两位数,那么直接输出。具体实现如下:
  1. for (int i = 1; i <= n; i++) {
  2.     for (int j = 1; j <= n; j++) {
  3.         if (a[i][j] < 10) { // 当数字为一位数时,在输出后再输出一个空格
  4.             cout << a[i][j] << " ";
  5.         } else { // 否则直接输出
  6.             cout << a[i][j];
  7.         }
  8.     }
  9.     cout << endl;
  10. }
复制代码

通过这种方法输出时,就可以保证每个数字与其后面的空格间隔相同,不会因为位数不同而引起错位问题。

球一个最佳答案谢谢啦!这对我非常重要!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 04:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表