主题:入门必做的题
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个回复)
131 楼
xyz918 [专家分:0] 发布于 2006-05-02 04:06:00
真的假的,我没做过这么难也入门了
132 楼
dooon [专家分:180] 发布于 2006-05-02 10:18:00
我承认这些题不错,我做过的几道对自己的编程能力也有提高,但解一道至少要花1小时(入门的人除外),称为“入门必做”不太合适吧。而且,学习编程不应该是为了解决这些奇怪的题目吧。
133 楼
tossboy [专家分:160] 发布于 2006-05-02 10:47:00
这么难的题目 怎么做呀
不知阁下有没有答案呢?
有的话
把答案也发上来
那起不是很好?
134 楼
programlove [专家分:30] 发布于 2006-05-02 14:41:00
此贴不顶,誓不为人啊!!!!!!!!
135 楼
£巫婆£ [专家分:0] 发布于 2006-05-02 19:02:00
看了。。。在晕。。。。
136 楼
if007 [专家分:650] 发布于 2006-05-03 12:52:00
to 132楼
这些题算奇怪的题吗?...
准略的说,应该是编程不应"只"为解难题吧?
编程不"只"为解难题,不假,
但难题有助于提高编程能力,很真.
137 楼
iuhiao [专家分:1330] 发布于 2006-05-04 21:03:00
顶!!!
但能不能给一些答案呀,有的题不是很懂呀,最好大家交流一下
138 楼
iuhiao [专家分:1330] 发布于 2006-05-04 21:11:00
我做了几个,大家交流一下,还望高手能帮一下大家
/*********************************************************************
给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
D F G 同字母。编程求出这些数字并且打出这个数字的
+ D F G 算术计算竖式。
───────
X Y Z D E
**********************************************************************/
#include"stdio.h"
main()
{
int a,c,d,e,x,z;
for(c=6;c<=8;c++)
for(d=6;d<=8;d++)
if(c+d+d+1>20&&d!=c)
for(a=2;a<7;a++)
if(a!=c&&a!=d&&a!=5)
{x=a+1,z=c+d+d-19;
if(z!=0&&z!=a&&z!=1&&x!=5&&x!=c&&x!=d&&x!=9&&z!=a&&z!=x)
for(e=2;e<9;e++)
if(e!=a&&e!=5&&e!=d&&e!=z&&e!=x&&e!=c)
printf("\na=%d,b=9,c=%d,d=%d,e=%d,f=5,g=0,x=%d,y=1,z=%d",a,c,d,e,x,z);
}
}
/**************************************************************************
2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些人参加了竞赛:
(1)A参加时,B也参加;
(2)B和C只有一个人参加;
(3)C和D或者都参加,或者都不参加;
(4)D和E中至少有一个人参加;
(5)如果E参加,那么A和D也都参加。
0参加,1不参加
******************************************************************************/
#include"stdio.h"
main()
{
int a,b,c,d,e;
for(e=0,a=0;e<2;e++)
{
if(e)a=1,d=1; /*5*/
else d=1,c=d; /*4, 3*/
for(;a<2;a++)
{
if(a){ b=1; /*1*/
if(b!=c) /*2*/
printf("\na=%d,b=%d,c=%d,d=%d,e=%d",a,b,c,d,e);
}
else
{
if(c) b=0;
else b=1;
printf("\na=%d,b=%d,c=%d,d=%d,e=%d",a,b,c,d,e);
}
}
}
}
139 楼
iuhiao [专家分:1330] 发布于 2006-05-04 21:13:00
我做了几个,大家交流一下,还望高手能帮一下大家
/*********************************************************************************************
*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
*题解:用二维数组将方阵的上半部存贮,右半部=左半部,上半部=下半部,可用循环对上左半部赋值再用对称法
* 求出其它的,注意数字的输出可用相应ASSIC码值
*********************************************************************************************/
#include "stdio.h"
/*输出*/
void putout(char a[20][20],int n)
{
int i;
for(i=0;i<n;i++)
printf("\n\t%s",a[i]);
}
/*列镜面赋值*/
void mirrorcol(char a[20][20],int n)
{
int i,j;
for(i=0;i<(n+1)/2;i++)
for(j=(n+1)/2;j<n;j++)
a[i][j]=a[i][n-j-1]; /*算法*/
}
/*行镜面赋值*/
void mirrorrow(char a[20][20],int n)
{
int i,j;
for(i=(n+1)/2;i<n;i++)
for(j=0;j<=n;j++)
a[i][j]=a[n-i-1][j]; /*算法*/
}
main()
{
char a[20][20];
int i,j,n,k=49,m;
printf("\nplease insert the value of n(3<n<20) : ");
scanf("%d",&n);
for(i=0;i<(n+1)/2;i++) /*对行的前一半与列的前一半赋值*/
{
a[i][n]='\0',a[i][0]='T',a[i][1]='J';
if(i==0)
for(j=1;j<(n+1)/2;j++)
a[i][j]='T';
else if(i==1)
{
for(j=2;j<(n+1)/2;j++)
a[i][j]='J';
}
else for(j=2,m=i-1;j<(n+1)/2;j++,k++,m--) /*m控制数到几为止*/
if(m>0)
a[i][j]=k;
else a[i][j]=a[i][j-1];
k=49;
}
mirrorcol(a,n); /*列镜面赋值*/
mirrorrow(a,n); /*行镜面赋值*/
putout(a,n);
getch();
}
/**********************************************************************************
9. 四人玩火柴棍游戏,每一次都是三个人赢,一个人输。输的人要按赢者手中的火柴数进行赔偿,即赢者手中有多少根火柴棍,输者就赔偿多少根。现知道玩过四次后,每人恰好输过一次, 而且每人手中都正好有16根火柴。问此四人做游戏前手中各有多少根火柴? 编程解决此问题。
*********************************************************************************/
/*从最后一局开始判断*/
#include "stdio.h"
/*a为输第四局的,b为输第三局的,c为输第二局的,d为输第一局的*/
main()
{
int a=16,b=16,c=16,d=16;
d=d/2,b=b/2,c=c/2,a=b+c+d+a;
d=d/2,a=a/2,c=c/2,b=b+c+d+a;
d=d/2,b=b/2,a=a/2,c=b+c+d+a;
a=a/2,b=b/2,c=c/2,d=b+c+d+a;
printf("\nthe 1th faller has %d stick",d);
printf("\nthe 2th faller has %d stick",c);
printf("\nthe 3th faller has %d stick",b);
printf("\nthe 4th faller has %d stick",a);
getch();
}
140 楼
qqboy4623 [专家分:0] 发布于 2006-05-04 22:06:00
支持!我觉得好难`
我来回复