主题:入门必做的题
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个回复)
601 楼
feisua [专家分:10] 发布于 2009-03-09 23:36:00
顶啊,但源代码也要写出来啊,以便参考
602 楼
feisua [专家分:10] 发布于 2009-03-09 23:39:00
好帖,顶,源代码也写出来,以便参考,谢了
603 楼
、执着) [专家分:0] 发布于 2009-03-10 12:46:00
可是有没有答案呢。- -,
604 楼
wang_inimm [专家分:260] 发布于 2009-03-10 17:35:00
不错
605 楼
小令00 [专家分:1040] 发布于 2009-03-15 17:15:00
/*第一题
题目:
给定等式
A B C D E
D F G
+ D F G
───────
X Y Z D E
其中每个字母代表一个数字,且不同数字对应不同字母。
编程求出这些数字并且打出这个数字的算术计算竖式。
*/
/*
分析:
由于A、B、C、D、E、F、G、X、Y、Z代表十进制的一位数
所以只有0~9或1~9有限种可能
对A依次取1,2,……9,记录
对B依次取0,1,……9,判断是否与A值重复,如重复取下一个,如不重复,记录
对C依次取0,1,……9,判断是否与A、B值重复,如重复取下一个,如不重复,记录
……
对Z依次取0,1,……9,判断是否与A~Y值重复,如重复取下一个,如不重复,记录
判断是否满足题目的等式,如等式成立则输出
*/
#include <stdio.h>
#include <stdlib.h>
#define SX 9 //十进制的一位数的上限
#define XX1 1 //一十进制的位数的下限(A、D、X)
#define XX0 0 //十进制的一位数的下限(B、C、E、F、G、Y、Z)
#define GE 1
#define SHI 10*GE
#define BAI 10*SHI
#define QIA 10*BAI
#define WAN 10*QIA
#define SWS(a,b,c) ( (a)*BAI + (b)*SHI + (c)*GE ) //三位数
#define WWS(a,b,c,d,e) ( (a)*WAN + (b)*QIA + SWS(c,d,e) ) //五位数
typedef enum zm{A,B,C,D,E,F,G,X,Y,Z}ZM; //字母的编号
typedef enum yesno{NO,YES}YN;
#define GS 10 //字母的个数
void xunzhao(const ZM ); //寻找字母可能的值
int xiaxian(const ZM ); //字母取值的下限
YN cf(const int * const ,const ZM ,const int ); //判断选择的数值是否与前面的重复
void chuli (const int * const , const int ); //对结果进行处理
void shuchu(const int , const int , const int , const int );
int main(void)
{
xunzhao(A);
system("Pause");
return 0;
}
//寻找各个字母可能的值
void xunzhao(const ZM zm)
{ static int jg[GS] ; //jg 数组存放选择的结果
int tmp;
for ( tmp = xiaxian(zm) ; tmp <= SX ; tmp ++ ) //尝试着取一个值
{ if( cf( jg , zm , tmp ) == YES ) //重复则取下一个值
continue ;
jg [zm] = tmp ; //写入选择的数
if ( zm == Z ) //A~Z全部选择完毕
chuli ( jg , sizeof jg / sizeof *jg ) ; //对结果进行处理
else
xunzhao( zm + 1 ); //寻找下一个
}
}
//如果满足题目等式则输出
void chuli (const int * const a_z , const int gs)
{
int abcde = WWS ( a_z[A],a_z[B],a_z[C],a_z[D],a_z[E] ) ;
int dfg = SWS ( a_z[D],a_z[F],a_z[G] ) ;
int xyzde = WWS ( a_z[X],a_z[Y],a_z[Z],a_z[D],a_z[E] ) ;
if( abcde \
+ dfg \
+ dfg \
== xyzde )
shuchu( abcde,dfg,dfg,xyzde );
}
//判断是否与前面选过的值重复
YN cf(const int * const jg , const ZM wz ,const int shu )
{
const int *p;
for ( p = jg ; p < jg + wz ; p ++ )
if ( shu == *p )
return YES ;
return NO;
}
//求各个字母的下限值
int xiaxian(const ZM zm)
{ //A、D、X 最少为 1
if ( zm == A ) return XX1 ;
if ( zm == D ) return XX1 ;
if ( zm == X ) return XX1 ;
return XX0 ;
}
//按照题目格式输出4个数
void shuchu(const int s1 ,const int s2 ,const int s3 ,const int s4 )
{
printf ( "%10d\n" ,s1 );
printf ( "%10d\n" ,s2);
printf ( "%10d\n" ,s3);
printf ( "+_________\n" );
printf ( "%10d\n\n" ,s4 );
return ;
}
606 楼
小令00 [专家分:1040] 发布于 2009-03-15 17:21:00
怎么贴出来的这么难看
默认设置应该改改
607 楼
小令00 [专家分:1040] 发布于 2009-03-15 17:26:00
再试试
[size=2]/*第一题
题目:
给定等式
A B C D E
D F G
+ D F G
───────
X Y Z D E
其中每个字母代表一个数字,且不同数字对应不同字母。
编程求出这些数字并且打出这个数字的算术计算竖式。
*/
/*
分析:
由于A、B、C、D、E、F、G、X、Y、Z代表十进制的一位数
所以只有0~9或1~9有限种可能
对A依次取1,1,……9,记录
对B依次取0,1,……9,判断是否与A值重复,如重复取下一个,如不重复,记录
对C依次取0,1,……9,判断是否与A、B值重复,如重复取下一个,如不重复,记录
……
对Z依次取0,1,……9,判断是否与A~Y值重复,如重复取下一个,如不重复,记录
判断是否满足题目的等式,如等式成立则输出
*/
#include <stdio.h>
#include <stdlib.h>
#define SX 9 //十进制的一位数的上限
#define XX1 1 //一十进制的位数的下限(A、D、X)
#define XX0 0 //十进制的一位数的下限(B、C、E、F、G、Y、Z)
#define GE 1
#define SHI 10*GE
#define BAI 10*SHI
#define QIA 10*BAI
#define WAN 10*QIA
#define SWS(a,b,c) ( (a)*BAI + (b)*SHI + (c)*GE ) //三位数
#define WWS(a,b,c,d,e) ( (a)*WAN + (b)*QIA + SWS(c,d,e) ) //五位数
typedef enum zm{A,B,C,D,E,F,G,X,Y,Z}ZM; //字母的编号
typedef enum yesno{NO,YES}YN;
#define GS 10 //需要求的字母的个数
void xunzhao(const ZM ); //寻找字母可能的值
int xiaxian(const ZM ); //字母取值的下限
YN cf(const int * const ,const ZM ,const int ); //判断选择的数值是否与前面的重复
void chuli (const int * const , const int ); //对结果进行处理
void shuchu(const int , const int , const int , const int );
int main(void)
{
xunzhao(A);
system("Pause");
return 0;
}
//寻找各个字母可能的值
void xunzhao(ZM zm)
{ static int jg[GS] ; //jg 数组存放选择的结果
int tmp;
for ( tmp = xiaxian(zm) ; tmp <= SX ; tmp ++ ) //尝试着取一个值
{ if( cf( jg , zm , tmp ) == YES ) //重复则取下一个值
continue ;
jg [zm] = tmp ; //写入选择的数
if ( zm == Z ) //A~Z全部选择完毕
chuli ( jg , sizeof jg / sizeof *jg ) ; //对结果进行处理
else
xunzhao( zm + 1 ); //寻找下一个
}
return ;
}
//如果满足题目等式则输出
void chuli (const int * const a_z , const int gs)
{
int abcde = WWS ( a_z[A],a_z[B],a_z[C],a_z[D],a_z[E] ) ;
int dfg = SWS ( a_z[D],a_z[F],a_z[G] ) ;
int xyzde = WWS ( a_z[X],a_z[Y],a_z[Z],a_z[D],a_z[E] ) ;
if( abcde \
+ dfg \
+ dfg \
== xyzde )
shuchu( abcde,dfg,dfg,xyzde );
return ;
}
//判断是否与前面选过的值重复
YN cf(const int * const jg , const ZM wz ,const int shu )
{
const int *p;
for ( p = jg ; p < jg + wz ; p ++ )
if ( shu == *p )
return YES ;
return NO;
}
//求各个字母的下限值
int xiaxian(const ZM zm)
{ //A、D、X 最少为 1
if ( zm == A ) return XX1 ;
if ( zm == D ) return XX1 ;
if ( zm == X ) return XX1 ;
return XX0 ;
}
//按照题目格式输出4个数
void shuchu(const int s1 ,const int s2 ,const int s3 ,const int s4 )
{
printf ( "%10d\n" ,s1 );
printf ( "%10d\n" ,s2);
printf ( "%10d\n" ,s3);
printf ( "+_________\n" );
printf ( "%10d\n\n" ,s4 );
return ;
}[/size]
608 楼
小令00 [专家分:1040] 发布于 2009-03-15 17:38:00
输出:
29786
850
850
+_________
31486
请按任意键继续. . .
609 楼
毽儿用迅雷 [专家分:0] 发布于 2009-03-18 23:46:00
强烈支持!
610 楼
小令00 [专家分:1040] 发布于 2009-03-19 13:15:00
第8题很弱智
我来回复