C语言编程题“幸运方阵”问题怎么解决?

来源:百度知道 编辑:UC知道 时间:2024/04/30 09:59:54
所谓“幸运方阵”问题是这样的,任意指定一个阶数,例如3;再任意选定一个“幸运数”,例如100,要求生成一个3阶方阵。从方阵中任意划去一行与一列,记下交叉点的数值;再从方阵剩余部分任意划去一行一列,再记下交叉点数值;继续这一过程,当方阵已不剩任何元素时,所有记下的元素值之和恰好为100。如下面的方阵即为所需结果
51 43 63
17 9 29
28 20 40
注意:实际上给定一个阶数n与一个幸运数lucky,可以有无数多个解。如果不希望多出现负数,lucky相对于n不应过小。
========
阶数N和幸运数都是随机的!
===========
以下是题目的另一种解释
===========
输入一个方阵阶数和"幸运数",生成幸运方阵.幸运方阵是指从方阵中任意划去一行和一列,记下交叉点的数值,再从方阵剩余部分任意划去一行一列,再记下交叉点数值,继续这一过程,当方阵不剩任何元素时,所有记下的元素值之和恰好为输入的幸运数. 按规定的划法,所有记下的交叉点元素两两均是不同行不同列,并且这些元素的全体刚好覆盖了方阵的全部行列. 在程序中,每行给定一个数值,每列也给定一个数值,并且所有给定的行、列数值之和为输入的幸运数。在填写矩阵数据时,某位置上的值就为该位置和行数值加上该位置的列数值。
==========
==========
程序要求在V C++ 6.0上成功运行,成功后我给满分!!!

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define NUM 100
void main()
{
int i,j;
int m,n;
int sum=0;
int Lin[NUM],Row[NUM],a[NUM][NUM];
printf("请输入一个阶数和一个幸运数,两个数之间用逗号隔开:");
scanf("%d,",&m);
scanf("%d",&n);
srand(time(0));
for(i=0;i<m;i++)
{
if((n-sum)==0)
Lin[i]=0;
else
{
Lin[i]=rand()%(n-sum);
sum+=Lin[i];
}
}
for(j=0;j<m-1;j++)
{
if((n-sum)==0)
Row[j]=0;
else
{
Row[j]=rand()%(n-sum);
sum+=Row[j];
}
}
Row[m-1]=n-sum;
for(i=0;i<m;i++)
{
for(j=0;j<m;j++)
{
a[i][j]=Lin[i]+Row[j];
printf("%4d ",a[i][j]);
}
printf("\n");
}
}

关注一下

嘛啊!我走人吧!我还是初级的呢!学了不到1个月,C语言就解决了。。。。。。。。。。

在填写矩阵数据时,某位置上的值就为该位置