C语言程序设计:预测比赛名次

题目内容:

编程:甲、乙、丙三位球迷分别预测已进入半决赛的四支球队的名次如下:

甲预测:A队第1名,B队第2名;

乙预测:C队第1名,D队第3名;

丙预测:D队第2名,A队第3名。

比赛结果证实,甲、乙、丙预测各对一半。

试求A、B、C、D四队的名次(没有名次相同的情况)。

提示:本题的编程序方法可采用典型的枚举法,即“循环+选择”编程定式。可设变量a代表A队的名次,变量b代表B队的名次,变量c代表C队的名次,变量d代表D队的名次。变量a、b、c、d的取值范围都是1~4。这样就可以用四重循环结构得到四队不同名次的所有组合,对每个组合再来判断是否满足甲、乙、丙三人的预测,如果满足,则是问题的解。

进一步提示:判断条件的写法,以甲预测为例,A队第1名可表示a==1,B队第2名可表示为b==2,预测对一半可表示为(a==1)!=(b==2),或者((a == 1) + (b == 2) == 1),其它类同。

程序优化:也可采用三重循环结构,因为a、b、c、d之和是10,当a、b、c的取值确定以后,d的取值就确定了,即d=10-a-b-c。

采用这种枚举法编程的题目还有很多,如百元百鸡问题、韩信点兵问题以及数字组合问题等。

输入格式:

输出格式:

A=%d,B=%d,C=%d,D=%d

输入样例:

输出样例:

(恕不给出)

时间限制:500ms内存限制:32000kb

#include <stdio.h>
int main()
{
int x,y,z;
int i,j,k,m;
int a,b,c,d;                       
a=0;b=0;c=0;d=0;
for(i=1;a<=4;i++)
{
a++;
b=0;
for(j=1;b<=4;j++)
{
b++;
if(b==a)
b++;
c=0;
for(k=1;c<=4;k++)
{
c++;
if(c==a)
c++ ;
if(c==b)
c++;
d=0;
for(m=1;d<=4;m++ )
{
d++;
if(d==a)
d++;
if(d==b)
d++;
if(d==c)
d++;
x=((a==1)&&(!(b==2)))||((!(a==1))&&(b==2));
y=((c==1)&&(!(d==3)))||((!(c==1))&&(d==3));
z=((d==2)&&(!(a==3)))||((!(d==2))&&(a==3));
if(((x+y+z)==3)&&(a<5)&&(b<5)&&(c<5)&&(d<5)&&(a!=b)&&(a!=c)&&(a!=d)&&(b!=c)&&(b!=d)&&(c!=d))
printf("A=%d,B=%d,C=%d,D=%d\n",a,b,c,d);
}
}
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值