读书人

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

发布时间: 2013-01-05 15:20:39 作者: rapoo

关于一个信息数字化的问题
题目:某次数学竞赛,前五名是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;
}

读书人网 >C++

热点推荐