野鸭蛋的故事:

编程入门 行业动态 更新时间:2024-10-10 21:30:41

<a href=https://www.elefans.com/category/jswz/c5dbe5dd141e61e89141fcabb7c5ce32.html style=野鸭蛋的故事:"/>

野鸭蛋的故事:

抛砖引玉,望有大神指导更好的方法. 用了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 个野鸭蛋

 

更多推荐

野鸭蛋的故事:

本文发布于:2024-03-14 09:16:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1736146.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:野鸭   故事

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!