野鸭蛋的故事:"/>
野鸭蛋的故事:
抛砖引玉,望有大神指导更好的方法. 用了4个小时...边改编想:
四个旅游家(张虹、印玉、东晴、西雨)去不同的岛屿去旅行,每个人都在岛上发现了野鸡蛋(1个到3个)。4人的年龄各不相同,是由18岁到21岁。已知:
①东晴是18岁。
②印玉去了A岛。
③21岁的女孩子发现的蛋的数量比去A岛女孩的多1个。
④19岁的女孩子发现的蛋的数量比去B岛女孩的多1个。
⑤张虹发现的蛋和C岛的蛋之中,有一者是2个。
⑥D岛的蛋比西雨的蛋要多2个。
请问:张虹、印玉、东晴、西雨分别是多少岁?她们分别在哪个岛屿上发现了多少野鸡蛋?
大概思路是把 岛屿,年龄,姓名,鸭蛋数 当成一个结构,然后所有能搭配出的结构中 筛选出来符合要求的 结构。最后再在符合要求的结构 排列组合,选出符合要求的组合.(最开始时候 没筛选结构,直接排列组合去选 太多了....好长时间出不来....)
#include <iostream>
using namespace std;
//四个旅游家(张虹、印玉、东晴、西雨)去不同的岛屿去旅行,每个人都在岛上发现了野鸡蛋(1个到3个)。4人的年龄各不相同,是由18岁到21岁。已知:
//
//①东晴是18岁。
//
//②印玉去了A岛。
//
//③21岁的女孩子发现的蛋的数量比去A岛女孩的多1个。
//
//④19岁的女孩子发现的蛋的数量比去B岛女孩的多1个。
//
//⑤张虹发现的蛋和C岛的蛋之中,有一者是2个。
//
//⑥D岛的蛋比西雨的蛋要多2个。
//
//请问:张虹、印玉、东晴、西雨分别是多少岁?她们分别在哪个岛屿上发现了多少野鸡蛋?
struct Pei
{string Name; //姓名string Dao; //岛屿int Sui; //年龄int Shu;//野鸭蛋
};
string N[] = { "张虹","印玉","东晴","西雨" };
string D[] = { "A","B", "C","D" };
int S[] = { 18,19,20,21 };
int T[] = { 1,2,3};bool weiyi(Pei lp[]) //组合中 姓名,岛,年龄唯一
{for (int i = 0; i < 4; i++){for (int ii = 0; ii < 4; ii++){if (ii != i){if (lp[i].Dao == lp[ii].Dao ||lp[i].Name==lp[ii].Name||lp[i].Sui==lp[ii].Sui){return false;}}}}return true;
}int main()
{int c = 0;int z[] = { 0,0,0,0};Pei p[4 * 4 * 4 * 3];while (z[0]<4){if ((N[z[1]] == N[2] && S[z[0]] == S[0]) || (N[z[1]] != N[2] && S[z[0]] != S[0])) // 叫东晴 且18岁 或者不叫东晴也不是18岁 保留{if ((N[z[1]] == N[1] && D[z[2]] == D[0]) || (N[z[1]] != N[1] && D[z[2]] != D[0])) // 印玉 A岛 或者 不是印玉 也不是A岛{if ((S[z[0]] == 21 && D[z[2]] != D[0])|| S[z[0]] != 21 ) // 21岁 女孩 不是A岛 或者不是21岁{if ((S[z[0]] == 19 && D[z[2]] != D[1]) || S[z[0]] != 19) // 19岁 女孩 不是b岛 或者不是19岁{if ((N[z[1]] == N[0] && D[z[2]] != D[2]) || N[z[1]] != N[0]) //张虹 不是C,或者不是张虹{if ((N[z[1]] == N[3] && D[z[2]] != D[3] &&T[z[3]]==1) || (N[z[1]] != N[3]&&D[z[2]]==D[3]&& T[z[3]]==3)||(N[z[1]] != N[3] && D[z[2]] != D[3])) //(叫西雨 不在D岛 只有1个蛋) 或者(不叫西雨 在D岛 且有三个蛋 )或者(不叫西雨也不在D岛){p[c].Dao = D[z[2]];p[c].Name = N[z[1]];p[c].Shu = T[z[3]];p[c].Sui = S[z[0]];// cout << c << ": " << S[z[0]] << "岁的 " << N[z[1]] << " 去了 " << D[z[2]] << " 岛,在岛上找到了 " << T[z[3]] << " 个野鸭蛋" << endl;c++;}}}}}}// cout <<c <<": "<<S[z[0]] << "岁的 " << N[z[1]] << " 去了 " << D[z[2]] << " 岛,在岛上找到了 " << T[z[3]] << " 个野鸭蛋" << endl;z[3]++;for (int i = 3; i > 0; i--){if (i == 3){if (z[i] == 3){z[i] = 0;z[i - 1] ++;}}else{if (z[i] == 4){z[i] = 0;z[i - 1] ++;}}}}cout << "到了这里 : " <<c<< endl;int y[] = { 0,0,0,0 };int kkk = 0;int kka = 0;int kkb = 0;int kkc = 0;int kkd = 0;Pei KP[4];while (y[0]< c){for (int i = 0; i < 4; i++){KP[i] = p[y[i]];}if (p[y[0]].Dao == D[0] && p[y[1]].Dao == D[1] && p[y[2]].Dao == D[2] && p[y[3]].Dao == D[3]){kkk = kkk + 1;if (weiyi(KP)){kka = kka + 1;//if ((p[y[0]].Sui == 18 && p[y[0]].Name == N[2]) || (p[y[1]].Sui == 18 && p[y[1]].Name == N[2]) || (p[y[2]].Sui == 18 && p[y[2]].Name == N[2])// || (p[y[3]].Sui == 18 && p[y[3]].Name == N[2])) //东晴 18岁//{//if (p[y[0]].Name == N[1]) //印玉 A岛 //{if ((p[y[1]].Sui == 21 && p[y[1]].Shu - p[y[0]].Shu == 1) || (p[y[2]].Sui == 21 && p[y[2]].Shu - p[y[0]].Shu == 1)|| (p[y[3]].Sui == 21 && p[y[3]].Shu - p[y[0]].Shu == 1)) //21岁的女孩子 比去A岛的发现的 多1个{if ((p[y[0]].Sui == 19 && p[y[0]].Shu - p[y[1]].Shu == 1) || (p[y[2]].Sui == 19 && p[y[2]].Shu - p[y[1]].Shu == 1)|| (p[y[3]].Sui == 19 && p[y[3]].Shu - p[y[1]].Shu == 1)) //19岁的女孩子 比去B岛的发现的 多1个{//if (((p[y[0]].Name == N[0] && p[y[0]].Shu == T[1]) || p[y[2]].Shu == T[1]) ||// ((p[y[1]].Name == N[0] && p[y[1]].Shu == T[1]) || p[y[2]].Shu == T[1]) ||// ((p[y[3]].Name == N[0] && p[y[3]].Shu == T[1]) || p[y[2]].Shu == T[1])) //张虹发现的蛋 和C岛的岛 有1者是2个if (((p[y[0]].Name == N[0] && p[y[0]].Shu == T[1]) || (p[y[1]].Name == N[0] && p[y[1]].Shu == T[1]) || (p[y[3]].Name == N[0] && p[y[3]].Shu == T[1])) || p[y[2]].Shu == T[1]) //张虹发现的蛋 和C岛的岛 有1者是2个{if ((p[y[3]].Shu - p[y[0]].Shu == 2 && p[y[0]].Name == N[3]) || (p[y[3]].Shu - p[y[1]].Shu == 2 && p[y[1]].Name == N[3])|| (p[y[3]].Shu - p[y[2]].Shu == 2 && p[y[2]].Name == N[3])){cout << "" << endl;for (int i = 0; i < 4; i++){cout << kka << ": " << p[y[i]].Sui << "岁的 " << p[y[i]].Name << " 去了 " << p[y[i]].Dao << " 岛,在岛上找到了 " << p[y[i]].Shu << " 个野鸭蛋" << endl;}cout << "" << endl;}}/* }}*/}}}}y[3]++;for (int i = 3; i > 0; i--){if (y[i] == c){y[i] = 0;y[i - 1] ++;}}}}
到了这里 : 2729: 19岁的 印玉 去了 A 岛,在岛上找到了 2 个野鸭蛋
29: 20岁的 西雨 去了 B 岛,在岛上找到了 1 个野鸭蛋
29: 18岁的 东晴 去了 C 岛,在岛上找到了 2 个野鸭蛋
29: 21岁的 张虹 去了 D 岛,在岛上找到了 3 个野鸭蛋
更多推荐
野鸭蛋的故事:
发布评论