主题:入门必做的题
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个回复)
61 楼
rickone [专家分:15390] 发布于 2006-04-17 18:11:00
8错8错,这下大家有目标了~~
62 楼
xiaoqijun [专家分:660] 发布于 2006-04-17 21:19:00
// ③ 回转填数
#include<stdio.h>
#define MAX 20
int main(void)
{
int i,j,k,x=0;
int n,N;
int direct = 0; // direct为0表示向下移动,为1表示向上移动
int m[MAX][MAX];
scanf("%d",&n);
j = 0;
i = -1;
k = 0;
N = n*n;
while( k < N )
{
switch(direct)
{
case 0: // 向下
while( i < n-1-x )
m[++i][j] = ++k;
break;
case 1: // 向右
while( j < n-1-x )
m[i][++j] = ++k;
break;
case 2: //向上
while ( i > x )
m[--i][j]=++k;
break;
case 3: //向左
while ( j > x )
m[i][--j]=++k;
break;
}
if( direct == 3 )
{
direct=-1;
}
if(direct == 2 )
{
x++;
}
direct = direct+1;
}
for(i=0; i<n; ++i)
{
for(j=0; j<n; ++j)
printf("%4d", m[i][j]);
printf("\n");
}
return 1;
}
试着运行了eastcowboy的回转填数,发现于题意不合,可能是eastcowboy兄未看清楚题目,拿他的代码改了下!
63 楼
梅雨亭 [专家分:10] 发布于 2006-04-17 23:29:00
个个都是精辟题型!!!
谢了,对我一定会有很大帮助的.
64 楼
freeviewer [专家分:50] 发布于 2006-04-18 00:14:00
[em10]厉害啊!!有没答案给参照一下阿!!!那么好的题不会做有不懂的话岂不是很遗憾!!!!!!!!!!!!!
65 楼
fzubobi [专家分:60] 发布于 2006-04-18 09:07:00
收下了,谢谢
66 楼
xiaoqijun [专家分:660] 发布于 2006-04-18 09:24:00
我做的第5题~ 大家参考下!
#include <stdio.h>
void tran(int x,int y);
void dis(int t);
void main()
{
int input,count;
printf("请输入要转换的数:");
scanf("%d",&input);
printf("请输入要转换的进制:");
scanf("%d",&count);
tran(input,count);
printf("\n");
}
void tran(int x,int y)
{
int t;
t=x%y;
x=x/y;
if (x>=y)
tran(x,y);
else if (x>0)
dis(x);
dis(t);
}
void dis(int t)
{
switch(t)
{
case 10:printf("A");break;
case 11:printf("B");break;
case 12:printf("C");break;
case 13:printf("D");break;
case 14:printf("E");break;
case 15:printf("F");break;
default :printf("%d",t);
}
}
67 楼
hyerty [专家分:1110] 发布于 2006-04-18 10:00:00
我自己还好多东西没弄明白,先把自己问题搞定了再找题做了,HOHO~~~~~
68 楼
sgcpro [专家分:4020] 发布于 2006-04-18 10:06:00
胡天下之大扯
69 楼
xiaoqijun [专家分:660] 发布于 2006-04-18 11:24:00
/************************************************************************
8. 输入两个正整数X,Y,将X,Y化为二进制数,然后将这两个二进制数作二进
制加法运算,再将结果化为十进制数输出。
*************************************************************************/
#include <stdio.h>
#include <math.h>
void main()
{
int x,y;
int result=0;
scanf("%d%d",&x,&y);
int xrr[16],yrr[16],rerr[16]={0};
for (int i=0 ;i<16;i++)
{
xrr[i]=x%2;
yrr[i]=y%2;
x=x/2;
y=y/2;
rerr[i]+=xrr[i]+yrr[i];
if (rerr[i]>1)
{
rerr[i+1]+=1;
rerr[i]%=2;
}
result+=rerr[i]*pow(2,i);
}
printf("%d\n",result);
}
70 楼
eastcowboy [专家分:25370] 发布于 2006-04-18 12:20:00
9.题目: 四人玩火柴棍游戏,每一次都是三个人赢,一个人输。输的人要按赢者手中的火柴
数进行赔偿,即赢者手中有多少根火柴棍,输者就赔偿多少根。现知道玩过四次后,
每人恰好输过一次, 而且每人手中都正好有16根火柴。问此四人做游戏前手中各有
多少根火柴? 编程解决此问题。
9.解答:[color=FF0000]代码有点繁杂,对递归有比较好理解的同志们可以看看if007兄第94楼[/color]
// 假设4个人为a,b,c,d,不妨设第一次a输,第二次b输,第三次c输,第四次d输
#include<stdio.h>
int main(void)
{
int A,B,C;
int a,b,c,d;
for(A=0;A<=4*16;++A)
for(B=0;B<=4*16;++B)
for(C=0;C<=4*16;++C)
{
// 计算a,b,c,d
a = A;
b = B;
c = C;
d = 4*16-a-b-c;
if( d < 0 )
continue;
// 第一次: a输
a -= (b+c+d);
if( a < 0 )
continue;
b += b;
c += c;
d += d;
// 第二次: b输
b -= (a+c+d);
if( b < 0 )
continue;
a += a;
c += c;
d += d;
// 第三次: c输
c -= (a+b+d);
if( c < 0 )
continue;
a += a;
b += b;
d += d;
// 第四次: d输
d -= (a+b+c);
if( d < 0 )
continue;
a += a;
b += b;
c += c;
if( a==b && b==c && c==d && d==16 )
printf("A=%d, B=%d, C=%d, D=%d\n",A,B,C,16*4-A-B-C);
}
}
运行结果:
A=33, B=17, C=9, D=5
我来回复