(很菜鸟的问题,初学C语言)想问几个简单的C问题...
这几个小题怎么做,虽然听说很简单...师哥师姐们,帮帮忙啊
1. 有 N 个人围成一圈参加游戏,游戏的规则是:
N个人的编号分别为1、2、……、N,以编号为‘1’的人开始报数,报到 M 时该人跳出圈子,下一人继续报数。按此要求依次输出所有跳出圈子人员的编号。
2. 已知一维数组 A 共有25个元素,值为:A(I)=I,现将此一维数组存入二维数组 B(5,5),存放次序为:
A(1) A(2) A(5) A(10) A(17)
A(4) A(3) A(6) A(11) A(18)
A(9) A(8) A(7) A(12) A(19)
A(16) A(15) A(14) A(13) A(20)
A(25) A(24) A(23) A(22) A(21)
即:
B(1,1)=A(1) B(1,2)=A(2) B(1,3)=A(5) B(1,4)=A(10) B(1,5)=A(17)…
3. 在屏幕上输出杨辉三角形的前 N 行:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
4. 魔术矩阵问题:魔术矩阵由一个n×n(n为奇数)的整数矩阵构成,矩阵中的整数
值是从1~n2 。 每一行、每一列和两个对角线上数值之和相等。例如下面n为5的
魔术矩阵,它的和是65:
15 8 1 24 17
16 14 7 5 23
22 20 13 6 4
3 21 19 12 10
9 2 25 18 11
先谢谢你们了!
[解决办法]
第一题:
struct test{
int num;
int flag;
};
static int N =20;
static int M =30;
int main()
{
struct test test1[N+1];
int j=1,i=1,k=0,none=0,line=0;
memset(test1,0,sizeof(test1));
for(i=1;i <=N;i++)
{
test1[i].num=i;
test1[i].flag=1;
}
j=1;
i=0;
while(1)
{
none=0;
if(i++> =N)i=1;
if(test1[i].flag)
{
if(j++==M&&(j=1))
{
printf( "%d ",test1[i].num);
if(++line%10==0)printf( "\n ");
test1[i].flag=0;
for(k=1;k <=N;k++)
if(test1[k].flag){none=1;break;}
if(!none){printf( "\n ");return 0;}
}
}
}
}
第二题:
#define line 5
int main()
{
int a[line*line],b[line][line];
int i=0,j=0,k=0,m=0;
for(i=0;i <line*line;i++)
a[i]=i;
memset(b,0,sizeof(b));
for(i=0;i <line;i++)
{
for(j=0,k=i;j <=i;j++)
{
b[j][k]=a[m++];
}
for(k=i-1,j=i;k> =0;k--)
{
b[j][k]=a[m++];
}
}
for(i=0;i <line;i++)
{
for(j=0;j <line;j++)
printf( "%d ",b[i][j]);
printf( "\n ");
}
}
第三题:
#define N 10
int main()
{
int i=0,j=0,k=0,m=0,n=0;
int linenum=10,buf1[N+1],buf2[N+1];
memset(buf1,0,sizeof(buf1));
memset(buf2,0,sizeof(buf2));
buf1[1]=1;
for(i=1;i <N;i++)
{
for(j=1;j <=i;j++)
{
printf( "%d ",buf2[j]=buf1[j-1]+buf1[j]);
}
memset(buf1,0,sizeof(buf1));
memcpy(buf1,buf2,sizeof(buf1));
memset(buf2,0,sizeof(buf2));
printf( "\n ");
}
}