| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2737 人关注过本帖, 1 人收藏
标题:编程实现矩阵输出的问题
只看楼主 加入收藏
蝴蝶扣
Rank: 2
等 级:论坛游民
威 望:1
帖 子:52
专家分:76
注 册:2016-7-18
结帖率:83.33%
收藏(1)
已结贴  问题点数:20 回复次数:12 
编程实现矩阵输出的问题
编写程序,实现以下功能:
从键盘输入整数n(1≤n≤9),屏幕输出如下的n行n列方阵(以n=5为例),同行相邻数之间用空格分隔。
1 3 6 10 15
2 5 9 14 19
4 8 13 18 22
7 12 17 21 24
11 16 20 23 25

我能找出规律,但是编程思想不对,请大神指点。
搜索更多相关主题的帖子: 编写程序 键盘 
2017-04-05 22:53
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
收藏
得分:5 
回复 楼主 蝴蝶扣
程序代码:
#include <stdio.h>

int main()
{
    int n = 0;
    int nSum = 0;
    int nTmp = 1;
    scanf("%d", &n);
    for(int i = 0; i < n; i++)
    {
        nSum = 0;
        nTmp += i;
        for(int j = 0; j < n; j++)
        {
            if(j == 0)
            {
                nSum = nTmp;
            }
            else
            {
                nSum += i + j  + 1;
            }
            printf("%-3d ", nSum);
        }
        printf("\n");
    }
    return 0;
}
2017-04-05 23:32
peter张
Rank: 2
等 级:论坛游民
威 望:1
帖 子:56
专家分:98
注 册:2017-3-7
收藏
得分:5 
回复 2楼 烟雨晨曦
牛!!
2017-04-06 13:37
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:5 
回复 2楼 烟雨晨曦
编程思路和风格不错~不过每一行数列的增量并不都是递增的哦~发现有人顶了一下就认真看了看~结果不小心发现问题了~自己试试改改看~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-06 13:48
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
每一行增量
以n=5为例~

2 3 4 5
3 4 5 5
4 5 5 4
5 5 4 3
5 4 3 2

其实增量数列就是 2 3 4 5 5 4 3 2
求出这个数列的通项公式代进去就可以了~
当然用数组会简单很多~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-06 13:59
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
这样就可以了~

程序代码:
#include<stdio.h>
#include<math.h>
int main()
{
    int n = 0;
    int nSum = 0;
    int nTmp = 1;
    scanf("%d", &n);
    for(int i = 0; i < n; i++)
    {
        nSum = 0;
        nTmp +=i;
        for(int j = 0; j < n; j++)
        {
            if(j == 0)
            {
                nSum = nTmp;
            }
            else
            {
                nSum +=1.5+fabs(i + j+0.5-n);
            }
            printf("%-3d ", nSum);
        }
        printf("\n");
    }
    return 0;
}


刚刚没咋调试还是有点问题~看看怎么改~

[此贴子已经被作者于2017-4-6 14:35编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-06 14:08
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:5 
这个我想了很久,勉强弄出来一个。
算法有点复杂,期待优化。
#include <stdio.h>
#include <stdlib.h>
#include <mem.h>
int main()
 {
     int n = 0,*a,flag=0;
     scanf("%d", &n);
     a=(int *)malloc(n*n*sizeof(int));
     memset(a,0,n*n*sizeof(int));
     a[0]=1;
     for(int i=1;i<n;i++)
     {
             if(i<=n-1&&!flag){a[i*n]=a[(i-1)*n]+i;
             if(i==n-1)
             flag=1;}
             if(i==n-1&&flag==1)
             for(int j=1;j<n;j++)
             {
                    a[i*n+j]=a[i*n+j-1]+n-j+1;         
                   }
     }
     for(int i=n-2;i>=0;i--)
             for(int j=1;j<n;j++)
             {
                     if(a[(i+1)*n+j-1]!=0)a[i*n+j]=a[(i+1)*n+j-1]+1;
                     }
     for(int i=0;i<n*n;i++)
     {
            
             printf("%3d ",a[i]);
             if(!((i+1)%n))printf("\n");
     }
     getchar();
     getchar();
     return 0;
 }
2017-04-06 19:22
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 7楼 ehszt
~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-04-06 19:38
烟雨晨曦
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:150
专家分:599
注 册:2017-3-5
收藏
得分:0 
回复 4楼 九转星河
你有运行过程序么
2017-04-06 20:04
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
按照2楼及九版提示改了下
#include <stdio.h>
int main()
 {
     int n = 0;
     int nSum = 0;
     int nTmp = 1,end;
     scanf("%d", &n);
     end=n;
     for(int i = 0; i < n; i++)
     {
         nSum = 0;
         nTmp += i;
         for(int j = 0; j < n; j++)
         {
             if(j == 0)
             {
                 nSum = nTmp;
             }
             else
             {
                 if(j<end)
                 nSum +=i+j+1;
                 else
                 nSum+=n-(j-end);
             }
             printf("%-3d ", nSum);
         }
         end--;
         printf("\n");
     }
     getchar();
     getchar();
     return 0;
 }
收到的鲜花
  • 九转星河2017-04-06 21:58 送鲜花  5朵   附言:可以哦~
2017-04-06 20:59
快速回复:编程实现矩阵输出的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019099 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved