主题:入门必做的题
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个回复)
91 楼
woshichounanwopa [专家分:320] 发布于 2006-04-23 13:44:00
不错不错,这些题让我发现了很多问题,这些问题是看书习题不会发现的。真的是好东东啊!!强烈支持GCC兄
92 楼
woshichounanwopa [专家分:320] 发布于 2006-04-23 16:49:00
请问各位高手第九题能不能用递归来做啊,那位高人能不能贴上代码。小弟用递归没有弄出来。晕中。。。
93 楼
chenxinyi11 [专家分:180] 发布于 2006-04-23 18:01:00
喜欢挑战!有挑战才有进步!!!
94 楼
if007 [专家分:650] 发布于 2006-04-23 19:36:00
哈,大家兴致好高,那我也解一条吧.
/*******************************************************************************
问题描述:
四人玩火柴棍游戏,每一次都是三个人赢,一个人输。输的人要按赢者手中的火柴
数进行赔偿,即赢者手中有多少根火柴棍,输者就赔偿多少根。现知道玩过四次后,
每人恰好输过一次, 而且每人手中都正好有16根火柴。问此四人做游戏前手中各有
多少根火柴? 编程解决此问题。
********************************************************************************/
#include <iostream.h>
void fun(int a, int b, int c, int d, int n)
{
if (n>1)
fun(b/2,c/2,d/2,a+b/2+c/2+d/2, n-1);
else
cout<<a<<" "<<b<<" "<<c<<" "<<d<<" ";
}
void main()
{
fun(16,16,16,16,5);
}
95 楼
machh [专家分:30] 发布于 2006-04-23 22:25:00
我是新手,好多都不会, 有没有参考答案??那样就更好了,
96 楼
djs3933 [专家分:0] 发布于 2006-04-23 23:01:00
有没有参考答案啊
97 楼
coriase [专家分:180] 发布于 2006-04-23 23:05:00
第一道题好多循环,不过验证过结果是正确的,不知道有没更好的算法。
#include <iostream>
using namespace std;
int main ()
{int A,B,C,D,E,F,G,X,Y,Z,DFG,XYZDE;
for(A=0;A<10;A++)
for(B=0;B<10;B++)if(B!=A)
for(C=0;C<10;C++)if(C!=A&&C!=B)
for(D=0;D<10;D++)if(D!=A&&D!=B&&D!=C)
for(E=0;E<10;E++)if(E!=A&&E!=B&&E!=C&&E!=D)
for(F=0;F<10;F++)if(F!=A&&F!=B&&F!=C&&F!=D&&F!=E)
for(G=0;G<10;G++)if(G!=A&&G!=B&&G!=C&&G!=D&&G!=E&&G!=F)
for(X=0;X<10;X++)if(X!=A&&X!=B&&X!=C&&X!=D&&X!=E&&X!=F&&X!=G)
for(Y=0;Y<10;Y++)if(Y!=A&&Y!=B&&Y!=C&&Y!=D&&Y!=E&&Y!=F&&Y!=G&&Y!=X)
for(Z=0;Z<10;Z++)if(Z!=A&&Z!=B&&Z!=C&&Z!=D&&Z!=E&&Z!=F&&Z!=G&&Z!=X&&Z!=Y)
{
DFG=D*100+F*10+G;XYZDE=X*10000+Y*1000+Z*100+D*10+E;
if(XYZDE==DFG+DFG)
{cout<<"A:"<<A<<", B:"<<B<<", C:"<<C<<", D:"<<D<<", E:"<<E<<", F:"<<F<<", G:"<<G
<<", X:"<<X<<", Y:"<<Y<<", Z:"<<Z<<endl;
cout<<" "<<D<<F<<G<<endl;
cout<<" +"<<endl;
cout<<" "<<D<<F<<G<<endl;
cout<<" ____________"<<endl;
cout<<" "<<X<<Y<<Z<<D<<E<<endl<<endl;}
}
return 0;
}
98 楼
eastcowboy [专家分:25370] 发布于 2006-04-24 11:53:00
第5题,输入一个十进数,将其转换成 N 进制数(0<N<=16)。
支持小数和负数的版本:
#include<stdio.h>
#define BufferSize 30
int main()
{
double f,g;
int i,N;
char buf[BufferSize];
char Charactor[] = "0123456789ABCDEF";
scanf("%lf%d", &f, &N);
// 处理负数
if( f<0.0 )
{
printf("-");
f = -f;
}
// 保存小数部分
g = f-((double)(int)f);
// 处理整数部分
i = BufferSize-1;
buf[i--] = '\0';
while( f >= 1.0 )
{
int c = ((int)f)%N;
buf[i--] = Charactor[c];
f /= ((double)N);
}
printf("%s", buf+i+1);
// 处理小数部分
if( g==0.0 )
{
printf("\n");
return 0;
}
printf(".");
i = 0;
while( g != 0.0 )
{
int c = (int)(g*((double)N));
printf("%c", Charactor[c]);
g = g*((double)N)-((double)c);
++i;
if( i==10 ) // 最多显示10位,避免因无限循环小数而出现的死循环
break;
}
printf("\n");
return 0;
}
99 楼
usen [专家分:20] 发布于 2006-04-24 15:10:00
做完才算入门呀,路漫漫其修远兮,我将上下C++
100 楼
if007 [专家分:650] 发布于 2006-04-24 18:43:00
97楼似乎理解错题意了,依那种解法应该出现不少种答案.
第一题解(顺带一说,用暴力法是俺感觉最没劲的事了,期待有高手不用暴力法解的^-^):
#include <iostream.h>
const int len=10;
int number[len]={0,1,2,3,4,5,6,7,8,9};
int order(int n)
{
int i,temp;
if(n==len)
{
int abcde=number[0]*10000+number[1]*1000+number[2]*100+number[3]*10+number[4];
int xyzde=number[7]*10000+number[8]*1000+number[9]*100+number[3]*10+number[4];
int dfg=number[3]*100+number[5]*10+number[6];
if (xyzde == abcde+dfg+dfg) return 1;
return 0;
}
for(i=n; i<len; i++)
{
temp = number[i]; number[i] = number[n]; number[n] = temp;
if ( order(n+1) ) break;
temp = number[i]; number[i] = number[n]; number[n] = temp;
}
if (i<len) return 1;
return 0;
}
void main()
{
order(0);
cout<<"A:"<<number[0]<<", B:"<<number[1]<<", C:"<<number[2];
cout<<", D:"<<number[3]<<", E:"<<number[4]<<", F:"<<number[5];
cout<<", G:"<<number[6]<<", X:"<<number[7]<<", Y:"<<number[8];
cout<<", Z:"<<number[9]<<endl;
cout<<endl;
cout<<" "<<number[0]<<number[1]<<number[2]<<number[3]<<number[4]<<endl;
cout<<" "<<number[3]<<number[5]<<number[6]<<endl;
cout<<" + "<<number[3]<<number[5]<<number[6]<<endl;
cout<<" ________________"<<endl;
cout<<" "<<number[7]<<number[8]<<number[9]<<number[3]<<number[4]<<endl;
cout<<endl;
}
我来回复