📄 c题目答案.txt
字号:
Find this Xiong
又一个 WordPress Blog
Home 关于 关于
GCC入门题部分题目解答
Posted by admin 2007年06月13日
以下程序在VC6.0环境下测试通过
若出现程序编译不了,或需要注释的,可以加Q634419082
//////////////////////////////////////////////////////////////////////////////
//
// 1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
// D F G 同字母。编程求出这些数字并且打出这个数字的
// / + D F G 算术计算竖式。
// ───────
// X Y Z D E
//////////////////////////////////////////////////////////////////////////////
//
// (DE+FG+FG)%100 = DE -> FG = 50
// Z = (C+D+D+1)%10
// Y = ((C+D+D+1)/10 + B)%10 && Y != 0 && Z != 0
// -> B == 9 && C +D +D +1 > 20 -> C >= 5 && D >= 5
// X != A ->X = A+1
// E = 45 - (A +9 + C +D +E + 5 +0 +X +Y +Z) = 31 - A -C -D -E -X -Y -Z
/////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
void main()
{
unsigned int a, c, d, e, x, y, z;
printf("%10s\n", "A B C D E");
printf("%10s\n", "D F G");
printf("+%9s\n", "D F G");
printf("%10s\n", "───────");
printf("%10s\n\n\n", "X Y Z D E");
for(a = 1; a < 9; a++)
{
if(a == 5)
continue;
for(c = 5; c < 9; c++)
{
if(c == a )
continue;
for(d = 5; d < 9; d++)
{
if(d == a || d == c)
continue;
x = a +1;
y = ((c +2*d +1)/10 + 9)%10;
z = (c +2*d +1)%10;
e = 31-a-c-d-x-y-z;
if(x != a && y != a && z != a && e != a
&& x != 9 && y != 9 && z != 9 && e != 9
&& x != c && y != c && z != c && e != c
&& x != d && y != d && z != d && e != d
&& x != 5 && y != 5 && z != 5 && e != 5
&& x != 0 && y != 0 && z != 0 && e != 0
&& x != y && x != z && x != e && y != z
&& y != e && z != e
&& 10000*a +9000 +100*c +10*d +e +2*(100*d +50)
== 10000*x +1000*y +100*z +10*d +e)
{
printf("%2d%2d%2d%2d%2d\n", a, 9, c, d, e);
printf("%*d%2d%2d\n", 6, d, 5, 0);
printf("+%*d%2d%2d\n", 5, d, 5, 0);
printf("%10s————\n", "————");
printf("%2d%2d%2d%2d%2d\n", 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也都参加。
//////////////////////////////////////////////////////////////////////////////
//(4)&&(5)==>D=1 (6)
//(3)&&(6)==>C=1 (7)
//(7)&&(2)==>B=0 (8)
//设(A==1) 则(1)==>B=1 但是 (8)==>B==0 因此假设(A==1)不成立,故A==0 (9)
//设(E==1) 则(5)==>A=1 但是 (9)==>A==0 因此假设(E==1)不成立,故E==0 (10)
//综上可得: A=0, B=0, C=1, D=1, E=0
#include <stdio.h>
int main()
{
printf("A=0, B=0, C=1, D=1, E=0");
return 0;
}
//////////////////////////////////////////////////////////////////////////////
//
// 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
///////////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#define N 15
void main()
{
static char a[N][N], i, j, num;
int start = 0, end = N -1;
char str[] = "TJ12345678", ch;
for(int t =0; t <= N/2; t++, start++, end–, i++, j++)
{
ch = *(str + t);
for(i = start; i < end; i++)
a[i][j] = ch;
for(j = start; j < end; j++)
a[i][j] = ch;
for(i = end; i > start; i–)
a[i][j] = ch;
for(j = end; j > start; j–)
a[i][j] = ch;
if(start == end)
a[start][end] = ch;
}
for(i = 0; i < N; i++)
{
for(j = 0; j < N; j++)
printf("%c", a[i][j]);
printf("\n");
}
}
//////////////////////////////////////////////////////////////////////////////
//
// 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
//////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
#define N 4
static int a[N][N], count;
bool legal(int row, int col)
{
int i;
for(i = 0; i < row; i++)
{
if(a[i][col] == a[row][col])
return false;
}
for(i = 0; i < col; i++)
{
if(a[row][i] == a[row][col])
return false;
}
return true;
}
void trial(int row, int col, FILE *fp)
{
int i, j;
if(row == N)
{
printf("*********** %d **********\n", ++count);
fprintf(fp, "*********** %d **********\n", count);
for(i = 0; i < N; i++)
{
for(j = 0; j < N; j++)
{
printf("%5d", a[i][j]);
fprintf(fp, "%5d", a[i][j]);
}
putchar(10);
fputc(10, fp);
}
}
for(i = 1; i <= N; ++i)
{
a[row][col] = i;
if(legal(row, col))
trial((row*N+col+1)/N, (row*N+col+1)%N, fp);
}
}
void main()
{
FILE *fp = fopen("latin.txt", "w");
trial(0, 0, fp);
}
//////////////////////////////////////////////////////////////////////////////
//
// 5. 输入一个十进数,将其转换成 N 进制数(0<N<=16)。
//////////////////////////////////////////////////////////////////////////////
//只能是整数型
#include "iostream.h"
#include "assert.h"
void convert(int, int);
void main()
{
int num, carry;
cout<<"input the decimal number and carry:";
cin>>num>>carry;
assert(carry <= 17);
convert(num, carry);
}
void convert(int num, int carry)
{
int *a = new int[100];
int i = 0;
cout<<"decimal value "<<num<<" convert to the value by the carry as "<<carry<<" is: ";
while(num)
{
*(a+i) = num%carry;
num /= carry;
i++;
}
while(–i >= 0)
(*(a+i) < 10)?cout<<*(a+i):cout<<(char)(55+*(a+i));
cout<<endl;
}
//////////////////////////////////////////////////////////////////////////////
//
//6. 矩阵中填数. 当给出 N*N 的矩阵,要求用程序填入下列形式的数:
// ① 倒填,例如N=5 ② 蛇形填数 ③ 回转填数
//
// ┌─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┐ ┌─┬─┬─┬─┬─┐
// │25│24│23│22│21│ │ 1│ 3│ 4│10│11│ │ 1│16│15│14│13│
// ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
// │20│19│18│17│16│ │ 2│ 5│ 9│12│19│ │ 2│17│24│23│12│
// ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
// │15│14│13│12│11│ │ 6│ 8│13│18│20│ │ 3│18│25│22│11│
// ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
// │10│ 9│ 8│ 7│ 6│ │ 7│14│17│21│24│ │ 4│19│20│21│10│
// ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤ ├─┼─┼─┼─┼─┤
// │ 5│ 4│ 3│ 2│ 1│ │15│16│22│23│25│ │ 5│ 6│ 7│ 8│ 9│
// └─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┘ └─┴─┴─┴─┴─┘
//////////////////////////////////////////////////////////////////////////////
// 6.1
#include "stdio.h"
void main()
{
int n, i, j;
scanf("%d", &n);
int t = n*n;
for(i = n; i > 0; i–)
{
for(j = n; j > 0; j–)
printf("%5d", t–);
printf("\n");
}
}
// 6.2
#include "stdio.h"
#define N 15
void main()
{
int sum, j, t = 1, start, end;
static int a[N][N];
for(sum = 0; sum < 2*N -1; sum++)
{
start = (sum < N)?0:sum-(N-1);
end = (sum < N)?sum:(N-1);
for(j = start; j <= end; j++)
(sum%2)?(a[j][sum-j] = t++):(a[sum-j][j] = t++); //(sum%2)控制环绕方向
}
for(sum = 0; sum < N; sum++)
{
for(j = 0; j < N; j++)
printf("%5d", a[sum][j]);
printf("\n");
}
}
// 6.3
#include <stdio.h>
#define elem a[i][j] //用于控制方向, 若改为a[j][i], 则方向相反
#define N 10
void main()
{
static int a[N][N], i, j, num;
int start = 0, end = N -1;
for(int t =0; t <= N/2; t++, start++, end–, i++, j++)
{
for(i = start; i < end; i++)
a[i][j] = ++num;
for(j = start; j < end; j++)
a[i][j] = ++num;
for(i = end; i > start; i–)
a[i][j] = ++num;
for(j = end; j > start; j–)
a[i][j] = ++num;
if(start == end)
a[start][end] = ++num;
}
for(i = 0; i < N; i++)
{
for(j = 0; j < N; j++)
printf("%4d", elem);
printf("\n");
}
}
//////////////////////////////////////////////////////////////////////////////
//
// 7. 读入一行文本,包含若干个单词(以空格间隔,%结尾)。将其中以 A 开头的
// 单词与以 N 结尾的单词,用头尾交换的办法予以置换。
//
// i am a student what about you region code modern%
// i ma a student what tboua you negior code noderm%
//////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
void main()
{
char str[] = "i am a student what about you region code modern%";
char *p, *q, temp;
p = q = str;
while(*p != '%')
{
if(*p == ' ')
while(*p == ' ')
printf("%c", *p++);
q = p;
while(*p != ' ' && *p != '%')
p++;
if(*q == 'a' || *(p-1) == 'n')
{
temp = *q;
*q = *(p-1);
*(p-1) = temp;
}
while(q != p)
printf("%c", *q++);
}
}
//////////////////////////////////////////////////////////////////////////////
//
// 8. 输入两个正整数X,Y,将X,Y化为二进制数,然后将这两个二进制数作二进
// 制加法运算,再将结果化为十进制数输出。
//////////////////////////////////////////////////////////////////////////////
#include "stdio.h"
#include "math.h"
#define N 18
void dtob(unsigned int, int*, char*);
unsigned int btod(int*);
void badd(int*, int*, int*);
void show(int*, char*);
void main()
{
unsigned int x, y;
static int xb[N], yb[N], resultb[N], i;
printf("input the decimal value X and Y:");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -