主题:入门必做的题
GCC
[专家分:14380] 发布于 2006-04-14 11:53:00
1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
D F G 同字母。编程求出这些数字并且打出这个数字的
+ D F G 算术计算竖式。
───────
X Y Z D E
2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
人参加了竞赛:
(1)A参加时,B也参加;
(2)B和C只有一个人参加;
(3)C和D或者都参加,或者都不参加;
(4)D和E中至少有一个人参加;
(5)如果E参加,那么A和D也都参加。
3. 打印一个 N*N 的方阵,N为每边 N=15 打印出下面图形
字符的个数(3<N<20), 要求最 TTTTTTTTTTTTTTT
外一层为"T", 第二层为"J", 从第三层 TJJJJJJJJJJJJJT
起每层依次打印数字 1,2,3,... TJ11111111111JT
(右图以N为15为例) TJ12222222221JT
TJ12333333321JT
TJ12344444321JT
TJ12345554321JT
TJ12345654321JT
TJ12345554321JT
TJ12344444321JT
TJ12333333321JT
TJ12222222221JT
TJ11111111111JT
TJJJJJJJJJJJJJT
TTTTTTTTTTTTTTT
4. 在N行N列的数阵中, 数K(1〈=K〈=N)在每行和每列中出现且仅
出现一次,这样的数阵叫N阶拉丁方阵。例如下图就是一个五阶拉丁方阵。
编一程序,从键盘输入N值后,打印出所有不同的N阶拉丁方阵,并统计个数。
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4
5. 输入一个十进数,将其转换成 N 进制数(0<N<=16)。
回复列表 (共635个回复)
311 楼
tgbtgb [专家分:490] 发布于 2006-09-10 13:37:00
蛇形填数
#include"stdio.h"
main()
{int s[100][100],x[100][100],i,j,d,n,m,v,c,b;
m=1;d=1;v=1;c=1;b=1;
printf("input:\n");
scanf("%d",&n);
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
s[i][j]=m++;
x[1][1]=s[b][c++];
i=1;j=1;
while(v!=n*n)
{if(v%n==0)
{c=1;
b++;}
switch(d)
{case 1:
{i++;
v++;
x[i][j]=s[b][c++];
if(j==1)
d=2;
else
d=4;
break;}
case 2:
{ i--;
j++;
v++;
x[i][j]=s[b][c++];
if(j==n)
d=1;
else
if(i==1)
d=3;
break;}
case 3:
{j++;
v++;
x[i][j]=s[b][c++];
if(i==n)
d=2;
else
d=4;
break;}
case 4:
{i++;j--;
v++;
x[i][j]=s[b][c++];
if(i==n)
d=3;
else
if(j==1)
d=1;
break;}
}
}
printf("output:\n");
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
printf("%5d",x[i][j]);
printf("\n");
}
}
312 楼
tgbtgb [专家分:490] 发布于 2006-09-10 13:43:00
八数码问题
#include "stdio.h"
typedef struct aa
{int x;
int y;
}ll;
ll top[5];
int z=0,i=0,depth=-1;
int pp(int a[5][5],int b[5][5])
{int k,j,num;
num=0;
for(k=1;k<4;k++)
for(j=1;j<4;j++)
if(a[k][j]!=b[k][j])
if(a[k][j]!=0)
num++;
return num;
}
int gujia(int al[5][5],int bl[5][5],int w,int dep1[5])
{int k,j,tem;
tem=0;
for(k=1;k<4;k++)
for(j=1;j<4;j++)
if(al[k][j]!=bl[k][j])
if(al[k][j]!=0)
tem++;
switch(w)
{
case 1:tem=tem+dep1[1]+1;break;
case 2:tem=tem+dep1[2]+1;break;
case 3:tem=tem+dep1[3]+1;break;
case 4:tem=tem+dep1[4]+1;break;
}
return tem;
}
int dd(int vv[5])
{int d,h,l;
d=vv[1];
l=1;
for(h=2;h<5;h++)
if(vv[h]<d)
{d=vv[h];
l=h;
}
return l;
}
313 楼
tgbtgb [专家分:490] 发布于 2006-09-10 13:43:00
main()
{
int a[5][5],b[5][5],v[5],dep[5],t,q,h,l,j,d,r,e,o;
int han,lie,min;
int a1[5][5],a2[5][5],a3[5][5],a4[5][5],c[5];
int s[5][5]={{1,1,1,1,1},{1,0,0,0,1},{1,0,0,0,1},{1,0,0,0,1},{1,1,1,1,1}};
int ss[5][5][5];
printf("请输入初始状态:\n");
for(t=1;t<4;t++)
for(q=1;q<4;q++)
{scanf("%d ",&a[t][q]);
if(a[t][q]==0)
{han=t;
lie=q;
}
}
printf("\n");
printf("请输入目标状态:\n");
for(t=1;t<4;t++)
for(q=1;q<4;q++)
scanf("%d ",&b[t][q]);
top[i].x=han;
top[i].y=lie;
do{
for(o=1;o<5;o++)
for(r=1;r<4;r++)
for(e=1;e<4;e++)
ss[o][r][e]=s[r][e];
for(o=1;o<5;o++)
dep[o]=depth;
for(h=1;h<4;h++)
for(l=1;l<4;l++)
{a1[h][l]=a[h][l];
a2[h][l]=a[h][l];
a3[h][l]=a[h][l];
a4[h][l]=a[h][l];
}
if(s[top[i].x][top[i].y+1]==0)
{c[1]=1;
for(h=1;h<4;h++)
for(l=1;l<4;l++)
ss[1][h][l]=0;
ss[1][top[i].x][top[i].y]=1;
j=a1[top[i].x][top[i].y+1];
a1[top[i].x][top[i].y+1]=a1[top[i].x][top[i].y];
a1[top[i].x][top[i].y]=j;
v[1]=gujia(a1,b,1,dep);
}
if(s[top[i].x-1][top[i].y]==0)
{
c[2]=1; for(h=1;h<4;h++)
for(l=1;l<4;l++)
ss[2][h][l]=0;
ss[2][top[i].x][top[i].y]=1;
j=a2[top[i].x-1][top[i].y];
a2[top[i].x-1][top[i].y]=a2[top[i].x][top[i].y];
a2[top[i].x][top[i].y]=j;
v[2]=gujia(a2,b,2,dep);
}
if(s[top[i].x][top[i].y-1]==0)
{
for(h=1;h<4;h++)
for(l=1;l<4;l++)
ss[3][h][l]=0;
ss[3][top[i].x][top[i].y]=1;
c[3]=1;
j=a3[top[i].x][top[i].y-1];
a3[top[i].x][top[i].y-1]=a3[top[i].x][top[i].y];
a3[top[i].x][top[i].y]=j;
v[3]=gujia(a3,b,3,dep);
}
if(s[top[i].x+1][top[i].y]==0)
{c[4]=1;
for(h=1;h<4;h++)
for(l=1;l<4;l++)
ss[4][h][l]=0;
ss[4][top[i].x][top[i].y]=1;
j=a4[top[i].x+1][top[i].y];
a4[top[i].x+1][top[i].y]=a4[top[i].x][top[i].y];
a4[top[i].x][top[i].y]=j;
v[4]=gujia(a4,b,4,dep);
}
i++;
for(d=1;d<5;d++)
{if(c[d]==0)
v[d]=1000; dep[d]++;}
min=dd(v);
switch(min)
{case 1:
{top[i].x=top[i-1].x;
top[i].y=top[i-1].y+1;
for(h=1;h<4;h++)
for(l=1;l<4;l++)
a[h][l]=a1[h][l];
for(h=1;h<4;h++)
for(l=1;l<4;l++)
s[h][l]=ss[1][h][l];
break;}
case 2:
{top[i].x=top[i-1].x-1;
top[i].y=top[i-1].y;
for(h=1;h<4;h++)
for(l=1;l<4;l++)
a[h][l]=a2[h][l];
for(h=1;h<4;h++)
for(l=1;l<4;l++)
s[h][l]=ss[2][h][l];
break;}
case 3:
{top[i].x=top[i-1].x;
top[i].y=top[i-1].y-1;
for(h=1;h<4;h++)
for(l=1;l<4;l++)
a[h][l]=a3[h][l];
for(h=1;h<4;h++)
for(l=1;l<4;l++)
s[h][l]=ss[3][h][l];
break;}
case 4:
{top[i].x=top[i-1].x+1;
top[i].y=top[i-1].y;
for(h=1;h<4;h++)
for(l=1;l<4;l++)
a[h][l]=a4[h][l];
for(h=1;h<4;h++)
for(l=1;l<4;l++)
s[h][l]=ss[4][h][l];
break;}
}
for(h=1;h<5;h++)
c[h]=0;
for(h=1;h<4;h++)
{for(l=1;l<4;l++)
printf("%4d",a[h][l]);
printf("\n");
}
printf("\n");
printf("\n");
depth++;
}while(pp(a,b));
printf("\n最少步骤:%d",depth+1);
}
314 楼
waterlog [专家分:0] 发布于 2006-09-11 13:08:00
我也要入入门了,这些看起来蛮难的,如果大家有做的可以拿出来交流下呀
315 楼
波者无双 [专家分:0] 发布于 2006-09-17 16:37:00
真的是不简单~~第一题就用到递归~~第二题用到位运算添!!
第三第四更加用到两次双重for循环
316 楼
wl8610510 [专家分:0] 发布于 2006-09-18 15:56:00
天杀的,这么多,不过做的肯定爽死哦
317 楼
开始学习的毛毛 [专家分:0] 发布于 2006-09-18 21:09:00
往死里顶!太好了,谢谢楼主[em12][em12][em12]
318 楼
e路无敌 [专家分:0] 发布于 2006-09-19 18:45:00
看完后觉得门还没入呢。。晕了。。自己都已经学完for循环与嵌套了。。觉得咋的也能算是入门了吧。。这题应该正好锻炼。。 第1题就没做出来啊。。
楼主 你应该叫。。入门终极题。。。学艺不精。。看了4道题 1道题也没解出
还是支持~~~好题。。
319 楼
Ulomo [专家分:0] 发布于 2006-09-21 17:04:00
我学了2个月的C语言 就把潭浩强老师给记住了,其他什么也没有~~看来入门还早啊..........
320 楼
258156098 [专家分:0] 发布于 2006-09-24 23:19:00
第一题题目有些不明白:等式是ABCDE+DFG+DFG=XYZDE的意思吗?
我来回复