主题:[讨论]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个回复)
111 楼
wuchengwei [专家分:1650] 发布于 2007-04-12 19:17:00
MANY THANKS
有错的地方请多多指出
最近忙
等忙完了,该更正的更正
更正不了的,就没办法了
112 楼
youkaisteve [专家分:140] 发布于 2007-04-13 17:11:00
31. 甲乙两人从24枚棋子中轮流取子,甲先取,规定每次所取的枚数不能多于上一个人所取的枚数,也不可不取。
(1)甲第一次取多少枚才能保证甲取得最后一枚,当然,他也不能第一次就把
所有棋子都取走。
(2)讨论棋子总数N(一定是偶数)从6到30的各种情况。讨论内容包括:
对各个N,是否存在一个小于N的枚数M,甲第一次取M枚后就能保证甲如果策略正确,一定能取到最后一枚棋子。
#include<stdio.h>
#define M 15
int main()
{
int a[M];
int i,m,n,*p=&a;
for(n=6;n<=30;n+=2)
{
int j=0;
for(i=3;i<=(n/2);i+=2)
{
if((n/i)%2==0&&n%i==0&&(((n/i)/2)%2==0||((n/i)/2)/2==0))
{ a[j]=n/i;
j++;
}
}
if(j==0)
printf("At %d you must fail unless you opponent is a fool",n);
else
printf("At %d you should first take a number of ",n);
for(m=0;m<j;++m)
printf("%d",*p+m);
printf(".");
printf("\n");
}
getch();
}
不知道对不对,会做的朋友指点下啊。
113 楼
vcacm [专家分:1500] 发布于 2007-04-14 17:31:00
[quote]//////////////////////////////////////////////////////////////////////////////
//
//21. 请设计一个程序,由计算机把1.. ̄.8的八个自然数填入图中,使得横、
// 竖、对角任何两个相邻的小方格中的两个数是不连续的。(下图右侧的 4 个图
// 为禁止的情形).
//
// ┌─┐ ┌─┐ ┌─┐
// │ │ │4│ │8│
// ┌─┼─┼─┐ └─┼─┐ ┌─┼─┘
// │ │ │ │ │5│ │7│
// ├─┼─┼─┤ └─┘ └─┘
// │ │ │ │ ┌─┐
// └─┼─┼─┘ │6│ ┌─┬─┐
// │ │ ├─┤ │1│2│
// └─┘ │7│ └─┴─┘
// └─┘
///////////////////////////////////////////////////////////////////////////
#include "stdio.h"
#include "string.h"
#include "math.h"
int a[4][3];
int count = 0;
bool legalelem(int row, int col)
{
switch (row)
{
case 0:
case 3:
if(col == 1)
return true;
else
return false;
case 1:
default:
return true;
}
}
bool islegal(int row, int col)
{
int i, j;
for(i = row-1; i <= row+1; i++)
{
if(i < 0 || i > 3)
continue;
for(j = col-1; j <= col+1; j++)
{
if(j < 0 || j > 2)
continue;
if(abs(a[i][j] - a[row][col]) == 1)
return false;
}
}
return true;
}
void trace(int n)
{
int i, j;
if(n > 8)
{
++count;
printf("\n********** %d **********\n", count);
for(i = 0; i < 4; i++)
{
for(j = 0; j < 3; j++)
{
if(legalelem(i, j))
printf("%6d", a[i][j]);
else
printf("%*s", 6, "");
}
putchar(10);
}
return;
}
for(i = 0; i < 4; i++)
{
for(j = 0; j < 3; j++)
{
if(a[i][j] == -1 && legalelem(i, j))
{
a[i][j] = n;
if(islegal(i, j))
trace(n+1);
a[i][j] = -1;
}
}
}
}
void main()
{
int i, j;
for(i = 0; i < 4; i++)
for(j = 0; j < 3; j++)
a[i][j] = -1;
trace(1);
}[/quote]
[code]
答案是多少呀!
我算的是 (2970种放法)!
[color=FF00FF]
楼主的程序在GCC/G++下不能运行!
特别是那个令人讨厌的 void main !
建议楼主,把程序全部改善一下!
[/color]
[/code]
114 楼
taofuyong [专家分:0] 发布于 2007-04-15 10:40:00
我是一个初学者,看到你编的程序感觉很好!
115 楼
taofuyong [专家分:0] 发布于 2007-04-15 11:26:00
哇!对我来说这个太有点难了,我今天学到FOR循环了,强免可看懂程序是怎么执行的?谢谢各位大哥大姐们你们提供的题目很精彩我以后会经常来着里看的,希望有一天也能在这里 发表自己的见解!谢谢!
116 楼
vcacm [专家分:1500] 发布于 2007-04-16 21:52:00
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//?19.?(背包问题)?有?N?件物品?d1,......dN,每件物品重量为?W1,...,?WN
//?(Wi?>?0),?每件物品价值为?V1,......VN?(Vi>0)。用这N件物品的某个子集
//?填空背包,使得所取物品的总重量<=TOTAL,并设法使得背包中物品的价值尽可
//?能高。
//////////////////////////////////////////////////////////////////////////////////////////////////////////
经典的DP问题!
解答见: http://www.programfan.com/club/showbbs.asp?id=226056
[code]
?#include?<stdio.h>
????
????#define??MAX_NUM?101
????#define??MAX_W 1001
????
????int?main?(?int?argc,?char?argv[]?)
????
????{
????????long?m[MAX_NUM][MAX_TIME];????
????????int?t?,?v?,?w,?n?;
????????int?i,j;
????????long?k;
????????memset(m?,?0?,?sizeof(m)?);
????????
????????scanf("%d?%d",&w,?&n);
????????
????????for(i=1;?i<=?n?;?i++)
????????{
????????????scanf("%d?%d",&t,?&v);
????????????for(j=1;?j<=?w;?j++)
????????????{
????????????????if(j?>=?t?&&?(k?=?m[i-1][j-t]+v)>?m[i-1][j])
????????????????m[i][j]?=?k;
????????????????else
????????????????m[i][j]?=?m[i-1][j];
????????????}
????????}
????????
????????printf("%ld\n",m[n][w]);
????}????
[/code]
117 楼
vcacm [专家分:1500] 发布于 2007-04-16 21:55:00
it's not my wrong ,that is the pfan don't like linux Os !
So that code isn't very nice ,you goto :
the url to see see!
118 楼
dzm水水水 [专家分:0] 发布于 2007-04-25 13:59:00
[em5][em5][em5][em5]
119 楼
dzm水水水 [专家分:0] 发布于 2007-04-25 14:01:00
[em5][em5][em5][em5]
太好了想了好久都没头绪啊
支持啊
120 楼
MJGG [专家分:30] 发布于 2007-04-30 14:12:00
2. A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些
人参加了竞赛:
(1)A参加时,B也参加;
(2)B和C只有一个人参加;
(3)C和D或者都参加,或者都不参加;
(4)D和E中至少有一个人参加;
(5)如果E参加,那么A和D也都参加。
我来回复