首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于一个信息数字化的有关问题

2013-01-05 
关于一个信息数字化的问题题目:某次数学竞赛,前五名是A、B、C、D、E,赛前五位老师估计名次:A说:B是第三名,C是

关于一个信息数字化的问题
题目:某次数学竞赛,前五名是A、B、C、D、E,赛前五位老师估计名次:
A说:B是第三名,C是第五名。
B说:D是第二名,E是第四名。
C说:B是第一名,E是第四名。
D说:C是第一名,B是第二名。
E说:D是第二名,A是第三名。
结果每个人都说对一半,实际名次是什么?
#include<iostream.h>
int main()
{
int a,b,c,d,e;
for(a=1;a<=5;a++)
for(b=1;b<=5;b++)
if(a!=b)
for(c=1;c<=5;c++)
if(c!=a||c!=b)
for(d=1;d<=5;d++)
if(d!=a||d!=b||d!=c)
{
e=15-a-b-c-d;
if(e!=a||e!=b||e!=c||e!=d)
if(((b==3)+(c==5))==1||((d==2)+(e==4))==1||((b==1)+(e==4))==1||((c==1)+(b==2))==1||((d==2)+(a==3))==1)
cout<<"A,B,C,D,E名次是:"<<a<<b<<c<<d<<e<<endl;
//cout<<"A是第"<<a<<"名"<<endl;
//cout<<"B是第"<<b<<"名"<<endl;
//cout<<"C是第"<<c<<"名"<<endl;
//cout<<"D是第"<<d<<"名"<<endl;
//cout<<"E是第"<<e<<"名"<<endl;
}

}
程序运行的结果后出现了负数??????
而且名次的顺序不止一个????
算法和编程里面的小白一个,求指教!!!
[解决办法]
最后修正一下,呵呵.

#include <iostream>
using namespace std;

int main()
{
int a, b, c, d, e;

for (a = 1; a <= 5; a++)
{
for (b = 1; b <= 5; b++)
{
if (b == a) continue;

for (c = 1; c <= 5; c++)
{
if (c == a 
[解决办法]
 c == b) continue;

for (d = 1; d <= 5; d++)
{
if (d == a 
[解决办法]
 d == b 
[解决办法]
 d == c)
continue;

for (e = 1; e <= 5; e++)
{
if (e == a 
[解决办法]
 e == b 
[解决办法]
 e == c 
[解决办法]
 e == d)
continue;

/* A说:B是第三名,C是第五名。
   B说:D是第二名,E是第四名。
   C说:B是第一名,E是第四名。
   D说:C是第一名,B是第二名。
   E说:D是第二名,A是第三名。
   结果每个人都说对一半,实际名次是什么?*/
if (((b == 3 && c != 5) 
[解决办法]
 (b != 3 && c == 5)) && 
((d == 2 && e != 4) 
[解决办法]
 (d != 2 && e == 4)) && 
((b == 1 && e != 4) 
[解决办法]
 (b != 1 && e == 4)) && 
((c == 1 && b != 2) 


[解决办法]
 (c != 1 && b == 2)) && 
((d == 2 && a != 3) 
[解决办法]
 (d != 2 && a == 3)))
cout << "A:" << a << " B:" << b 
 << " C:" << c << " D:" << d 
 << " E:" << e << endl;
}
}
}
}
}

cin.get();
return 0;
}



输出:
A:3 B:2 C:5 D:1 E:4

[解决办法]
要换成&&,有没有优先级或者结合性问题就没看了.

#include <iostream>
using namespace std;

int main()
{
int a, b, c, d, e;

for (a = 1; a <= 5; a++)
{
for (b = 1; b <= 5; b++)
{
if (b == a) continue;

for (c = 1; c <= 5; c++)
{
if (c == a 
[解决办法]
 c == b) continue;

for (d = 1; d <= 5; d++)
{
if (d == a 
[解决办法]
 d == b 
[解决办法]
 d == c)
continue;

for (e = 1; e <= 5; e++)
{
if (e == a 
[解决办法]
 e == b 
[解决办法]
 e == c 
[解决办法]
 e == d)
continue;

/*
A说:B是第三名,C是第五名。
B说:D是第二名,E是第四名。
C说:B是第一名,E是第四名。
D说:C是第一名,B是第二名。
E说:D是第二名,A是第三名。
结果每个人都说对一半,实际名次是什么?
*/
if (((b == 3) + (c == 5) == 1) && 
((d == 2) + (e == 4) == 1) && 
((b == 1) + (e == 4) == 1) && 
((c == 1) + (b == 2) == 1) && 
((d == 2) + (a == 3) == 1))
cout << "A:" << a << " B:" << b 
 << " C:" << c << " D:" << d 
 << " E:" << e << endl;
}
}
}
}
}

cin.get();
return 0;
}

热点排行