有以下几道题,请诸位高手帮忙出手.这三道题都是用数组做
(1) 查找一个二维数组中的鞍点,即该位置上的元素在该行上最大,该列上最小,也可能没有鞍点.
(2) 打印魔方阵,所谓魔方阵是指这样的方阵,它的每一行,每一列和对角线之和均相等.例如,三阶魔方阵为:
8 1 6
3 5 7
4 9 2
(3) 假设当年产值为100,工业产值的增长率为每年c%,当c分别为6,8,10,12时,试求工业产值分别过多少年可实现翻番(即增长一倍).
此题我是这样做的:
#define N 100.0f
main()
{
int c[]={6,8,10,12};
int y[4];
int i,j;
float s[150];
for(j=0;j<4;j++)
{
y[j]=0; s[1]=N;
for(i=1;s[i]<200;i++)
{
s[i]=s[i]*(1+c[j]/N);
printf("%f\n",s[i]);
y[j]++;
}
printf("%d\t%d\n",c[j],y[j]);
}
}
但是运行提示:flodting point error:domain.,我怎么改也没运行成功.
----------------解决方案--------------------------------------------------------
#include"stdio.h"
#define M 3
#define N 3
void judge(int a[M][N]);
int count=0;
main()
{
int i;
int date[M][N]={5,15,3,7,15,3,4,10,9};
for(i=0;i<M;i++)
judge(date);
if(count==0)
printf("NO match found!\n");
}
void judge(int a[M][N])
{
static int n1=0; /* 每次一行扫描 */
int k,m1=0,n2=0,max=a[n1][0],min; /* a[n1][m1]表示这行的最大,a[n2][m1]表示此行最大数的列的最小*/
for(k=0;k<N;k++) /* 找最大 */
if(a[n1][k]>max)
{ max=a[n1][k];
m1=k;
}
min=a[0][m1];
for(k=0;k<M;k++) /* 找最小 */
if(a[k][m1]<min)
{
min=a[k][m1];
n2=k;
}
if(n1==n2) /* 看它们的横坐标是否相等 */
{
count++;
printf("date[%d][%d]= %d suit the condition!\n",n1,m1,a[n1][m1]);
}
n1++;
}
----------------解决方案--------------------------------------------------------
#include<stdio.h>
#define N 20
int main()
{
int i,j,n,m,k,max,data[N][N];
printf("输入数组的行和列,均不可超过%d:",N,N);
scanf("%d%d",&n,&m);
printf("输入%d行%d列的数组:\n",n,m);
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
scanf("%d",&data[i][j]);
}
}
for(i=0;i<n;i++)
{
max=-32767;
for(j=0;j<m;j++)
{
if(data[i][j]>max)
{
max=data[i][j];
k=j;
}
}
for(j=0;j<n;j++)
{
if(max>data[j][k])
{
break;
}
}
if(j>=n)
{
printf("鞍点是(%d,%d)=%d\n",i+1,k+1,max);
}
}
return(0);
}
----------------解决方案--------------------------------------------------------
呵呵,好象是c语言书上的习题哦。..
----------------解决方案--------------------------------------------------------