主题:入门必做的题
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个回复)
41 楼
bottles [专家分:670] 发布于 2006-04-16 12:35:00
hehe, which door do you refer to???
42 楼
聚散缘 [专家分:90] 发布于 2006-04-16 13:02:00
c语言须说是学了一年多了~~
但是用起来那才少的很~~
还好就是现在有开始学习c版的数据结构和算法
要不能真的要全部还回去了~~
看见那些题目真是有难度~~
43 楼
eastcowboy [专家分:25370] 发布于 2006-04-16 14:59:00
手算第一题?(编程找不到什么好的方法)
// ABCDE
// DFG
// + DFG
// ------
// XYZDE
// 每个字母是不同数字
// 求所有可能
/*
解:先看后两位,得FG+FG=00,所以F=5,G=0,进一位
前三位:ABC+D+D+1=XYZ,由于数是不同的,所以百位上有进位
于是B+(C+D+D+1)/10 > 10(由于Y!=G=0,所以不取等号),B只能是9(若为8,则C+D+D<=25不满足)
Y!=G=0,所以Y为1。即C+D+D+1进了两位,C+D+D+1>20,C+D+D>19
剩余数字为2,3,4,6,7,8,所以C,D取值:(4,8),(6,8),(7,8),(6,7)
若C=4,D=8,则C+D+D+1=21,所以Z=1=Y,不行
若C=6,D=8,则C+D+D+1=23,所以Z=3;由于X=A+1,但数字只剩2,4,7,不行
若C=7,D=8,则C+D+D+1=24,所以Z=4;由于X=A+1,数字只剩2,3,6,所以A=2,X=3,E=6
若C=6,D=7,则C+D+D+1=21,所以Z=1=Y,不行
综上,算式为:
29786
850
+ 850
------
31486
*/
#include<stdio.h>
#include<assert.h>
int main(void)
{
int a=2,b=9,c=7,d=8,e=6,f=5,g=0,x=3,y=1,z=4;
int op1 = a*10000+b*1000+c*100+d*10+e;
int op2 = d*100+f*10+g;
int op3 = x*10000+y*1000+z*100+d*10+e;
assert( op1+op2+op2 == op3 );
printf(" 29786\n"
" 850\n"
"+ 850\n"
"------\n"
" 31486\n");
return 0;
}
44 楼
yunzhou008 [专家分:410] 发布于 2006-04-16 15:48:00
NB呀
45 楼
cracker007 [专家分:22140] 发布于 2006-04-16 16:33:00
这里很多题目都是toj上的,所以说是入门的题稍稍有些过,当然要看这“入门”二字如何理解。要解决这些题目,递归,回溯,动态规划,甚至np等算法都要用到,这种“入门”无疑不是普通人所想的那种入门。所以大家也不必丧失信心,一点一点来。
46 楼
xiao062311 [专家分:0] 发布于 2006-04-16 16:59:00
大哥有答案没,我是超初学者啊.........
47 楼
jacuket [专家分:80] 发布于 2006-04-16 18:11:00
惨!!!我是计算机专业的(今年刚开始上大学啦)。
学校的C语言课业上完了!!学得不知道怎样。
但看了这些题才发现自己什么都不懂
我一道题都不会做!!
希望哪个高手能指点迷津,我接下来该怎么学啊!!
48 楼
casm [专家分:350] 发布于 2006-04-16 18:59:00
呵呵,GCC这篇东西,鼓励了一批人,也吓倒了一批人啊!哈哈
看了下 东方牛娃 的那个手算,挺有创意的。我的想法是用循环来遍历,至多就是
26*26*10 次循环,这对CPU来说,是小case。
建议一下,大家抽空闲时间,每人写道题的答案,我想过不了多久,就能把所有的答
案都凑齐吧。
各位觉得呢?
49 楼
wenxiao001 [专家分:90] 发布于 2006-04-16 19:10:00
怎么看都不能理解第一题的意思...啊门,完成第二题,放出代码
没有注释...原谅啊...算出来是容易,实现出来就麻烦了...
#include <iostream.h>
main(){int f,a,b,c,d,e;
f=1;;
while(f==1)
{ for(a=0;a<=1;a++)
{for(b=0;b<=1;b++){for(c=0;c<=1;c++){
for(d=0;d<=1;d++){
for(e=0;e<=1;e++){if(a==0){if(b==0&&c==1){if(e==0){if(a==0&&d==0){f=2;
if(a==0){cout<<"a参加";}
if(b==0){cout<<"b参加";}
if(c==0){cout<<"c参加";}
if(d==0){cout<<"d参加";}
if(e==0){cout<<"e参加";}
cout<<endl;
}}}}
else if(c==0){if(d==0&&b!=0){if(e!=0){f=2;if(a==0){cout<<"a参加";}
if(b==0){cout<<"b参加";}
if(c==0){cout<<"c参加";}
if(d==0){cout<<"d参加";}
if(e==0){cout<<"e参加";}}}}
}}}}} }
getchar();
}
我是用dev-c++编译完成的
输出a,b,c,d和c,d
不知道对不对..大侠们看看
50 楼
wenxiao001 [专家分:90] 发布于 2006-04-16 19:12:00
错了,是输出abde和cd....打错了- -
我来回复