主题:[讨论]GCC入门题部分题目解答
wuchengwei
[专家分:1650] 发布于 2006-11-03 03:44:00
以下程序在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);
}
}
}
}
}
最后更新于:2007-06-01 02:37:00
回复列表 (共144个回复)
121 楼
MJGG [专家分:30] 发布于 2007-04-30 14:14:00
1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
D F G 同字母。编程求出这些数字并且打出这个数字的
+ D F G 算术计算竖式。
───────
X Y Z D E
#include "stdafx.h"
#include "iostream.h"
bool different(int B,int C,int D,int E,int F,int G,int X,int Y,int Z)
{//if the 9 numbers are different,return true
int arr[10],i,j;
arr[1]=B;
arr[2]=C;
arr[3]=D;
arr[4]=E;
arr[5]=F;
arr[6]=G;
arr[7]=X;
arr[8]=Y;
arr[9]=Z;
for(i=1;i<9;i++)//若有两个相同返回 false
for(j=i;j<9;j++)
if(arr[i]==arr[j+1])
return false;
return true;
}
void main( )
{
long data;
int a=0,b,c,d,e,f,g,x,y,z,k;
for(data=123456789;data<=987654321;data=data+1)//所有不同的组合方式
{
b=data/100000000;
c=data/10000000-b*10;
d=data/1000000-data/10000000*10;
e=data/100000-data/1000000*10;
f=data/10000-data/100000*10;
g=data/1000-data/10000*10;
x=data/100-data/1000*10;
y=data/10-data/100*10;
z=data-data/10*10;
if((b*c*d*e*f*g*x*y*z!=0) && different(b,c,d,e,f,g,x,y,z))
{ cout<<data<<endl;
if(b*10000+c*1000+d*100+e*10+2*(g+10*f+100*d)==e+d*10+z*100+y*1000+x*10000)
{ cout<<a <<b <<c <<d <<e <<f <<g <<x <<y <<z <<endl;
cout<<"please input a number";
cin>>k;
}
}
}
}
122 楼
MJGG [专家分:30] 发布于 2007-04-30 14:30:00
楼主第二题的程序中数组的初始值为其他值是可能导致结果有错误
例如
01010时
望楼主能给出一个更通用的程序
谢谢
123 楼
qicai2007 [专家分:60] 发布于 2007-04-30 21:50:00
第一题果然有难度啊!难以想象啊![em18]太晕了!
124 楼
wuchengwei [专家分:1650] 发布于 2007-05-03 11:46:00
TO MJGG:已改正,谢谢
125 楼
bhdgx [专家分:110] 发布于 2007-05-11 17:11:00
不是GCC入门题吗,怎么在VC6.0环境下测试呢
126 楼
leaveye [专家分:60] 发布于 2007-05-21 01:16:00
// 1. 给定等式 A B C D E 其中每个字母代表一个数字,且不同数字对应不
// D F G 同字母。编程求出这些数字并且打出这个数字的
// / + D F G 算术计算竖式。
// ───────
// X Y Z D E
第一题手解:
1: G + G + E = aE, F + F + D + a = bD => F = 5, G = 0, b = 1
A B C D E
D 5 0
+ D 5 0
X Y Z D E
2: ABC + D + D + 1 = XYZ && G = 0
=> D > 5, A + 1 = X, B = 9, Y = 1, C Z 奇偶性不同
A 9 C D E
D 5 0
+ D 5 0
X 1 Z D E
3: 剩余数字 234678 ,A/X,C/Z 均为奇偶对
=> D、E 均为偶数,又由上有 C + D + D + 1 = 2Z ,
=> (C,D,Z) = { (6,8,3), (7,8,4) } ,其中 (6,8,3) 无法满足 A + 1 = X ,舍弃
=> C = 7, D = 8, Z = 4
4: 剩余 236 ,A + 1 = X
=> A = 2, X = 3, E = 6.
结论: 29786
850
+ 850
31486
127 楼
xifangjingji [专家分:90] 发布于 2007-05-31 18:18:00
谢谢楼主的帖,太号了!实在太好了,十分感谢!!
128 楼
chchp99 [专家分:0] 发布于 2007-06-06 14:52:00
流程图怎么写?
129 楼
AthenaLightened [专家分:10] 发布于 2007-06-07 17:12:00
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 6
int main(void)
{
int i,j;
for(i = 0;i < N;i++)
{
for(j = 0;j < N;j++)
{
printf("%2d",(i + j) % N + 1);
}
printf("\n");
}
return 0;
}
我来回复