请用c/c++编写一道算法题。 100
N个孩子,每个人的力量为X,分组玩一种随机游戏,站在一条线上,第一个为1,第二个为2,依次类推。从一个盒子里抽出M张卡片,每个卡片上有一对数字。表示属于同一组孩子的位置。...
N个孩子,每个人的力量为X,分组玩一种随机游戏,站在一条线上,
第一个为1,第二个为2,依次类推。从一个盒子里抽出M张卡片,每个卡片上有一对数字。
表示属于同一组孩子的位置。
假入一张卡片上有{1,4},另一张上有(4,3),则在位置{1,4,3}的孩子属于同一组。
其位置未在任何卡片上出现的孩子作为一个单人组参加。
每组实力为每个孩子力量和。实力最强组获胜。设计算法,输出最强组实力。
可以说说可以从哪方面入手。 展开
第一个为1,第二个为2,依次类推。从一个盒子里抽出M张卡片,每个卡片上有一对数字。
表示属于同一组孩子的位置。
假入一张卡片上有{1,4},另一张上有(4,3),则在位置{1,4,3}的孩子属于同一组。
其位置未在任何卡片上出现的孩子作为一个单人组参加。
每组实力为每个孩子力量和。实力最强组获胜。设计算法,输出最强组实力。
可以说说可以从哪方面入手。 展开
3个回答
展开全部
这个题挺简单的,给出思路吧,代码自己写
N个孩子分别分配到不同组。例如5个孩子,新建int group[5]={1,2,3,4,5},表示第一个孩子在1组,第二个在2组……第N个在N组
读取卡片上的数字,把第二个孩子的组号改为跟第一个相同。例如卡片上是{1,4},则将group里的4号变成1号,即:{1,2,3,1,5};
卡片读取完了,最后统计每个组里有多少人,例如上面的group,1组有2个人,2组1个,3组1个,4组0个,5组1个人,乘以力量就得到每个组的实力值
比较各组实力值,输出最大值即可
引用qw311312313的回答:
这个题挺简单的,给出思路吧,代码自己写
N个孩子分别分配到不同组。例如5个孩子,新建int group[5]={1,2,3,4,5},表示第一个孩子在1组,第二个在2组……第N个在N组
读取卡片上的数字,把第二个孩子的组号改为跟第一个相同。例如卡片上是{1,4},则将group里的4号变成1号,即:{1,2,3,1,5};
卡片读取完了,最后统计每个组里有多少人,例如上面的group,1组有2个人,2组1个,3组1个,4组0个,5组1个人,乘以力量就得到每个组的实力值
比较各组实力值,输出最大值即可
这个题挺简单的,给出思路吧,代码自己写
N个孩子分别分配到不同组。例如5个孩子,新建int group[5]={1,2,3,4,5},表示第一个孩子在1组,第二个在2组……第N个在N组
读取卡片上的数字,把第二个孩子的组号改为跟第一个相同。例如卡片上是{1,4},则将group里的4号变成1号,即:{1,2,3,1,5};
卡片读取完了,最后统计每个组里有多少人,例如上面的group,1组有2个人,2组1个,3组1个,4组0个,5组1个人,乘以力量就得到每个组的实力值
比较各组实力值,输出最大值即可
展开全部
如果先是{4,3}后是{1,4}呢,这种思路做出来就会出现问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include "stdafx.h"
#include <iostream>
#include <string>
using namespace std;
int main()
{
const int N = 4;
const int M = 3;
int studentPair[M][2] = { {1,2},{2,3},{3,1} };
int strengrh[N] = {1,2,3,5};
int ret[N][N] = { 0 };
int num[N] = { 0 };
int retnum = 0;
int retst[N] = {0};
for (int i = 0; i < M; ++i)
{
for (int j = 0; j < 2; ++j)
{
if (i == 0)
{
ret[i][j] = studentPair[i][j];
++num[retnum];
}
else
{
bool isadd = false;
for (int x = 0; x < retnum; ++x)
{
for (int z = 0; z < num[x]; ++z)
{
if (ret[x][z] == studentPair[i][j])
{
for (int y = 0; y < 2; ++y)
{
ret[x][num[x]] = studentPair[i][y];
++num[x];
}
isadd = true;
break;
}
}
if (!isadd)
{
retnum++;
for (int l = 0; l < 2; ++l)
{
ret[retnum][l] = studentPair[i][l];
}
}
}
if (isadd) break;
}
}
}
for (int i = 0; i < retnum; ++i)
{
for (int j = 0; j < num[i]; ++j)
{
retst[i] += strengrh[ret[i][j]];
}
cout << retst[i] << endl;//输出 retst中最大的
}
return 0;
}
#include <iostream>
#include <string>
using namespace std;
int main()
{
const int N = 4;
const int M = 3;
int studentPair[M][2] = { {1,2},{2,3},{3,1} };
int strengrh[N] = {1,2,3,5};
int ret[N][N] = { 0 };
int num[N] = { 0 };
int retnum = 0;
int retst[N] = {0};
for (int i = 0; i < M; ++i)
{
for (int j = 0; j < 2; ++j)
{
if (i == 0)
{
ret[i][j] = studentPair[i][j];
++num[retnum];
}
else
{
bool isadd = false;
for (int x = 0; x < retnum; ++x)
{
for (int z = 0; z < num[x]; ++z)
{
if (ret[x][z] == studentPair[i][j])
{
for (int y = 0; y < 2; ++y)
{
ret[x][num[x]] = studentPair[i][y];
++num[x];
}
isadd = true;
break;
}
}
if (!isadd)
{
retnum++;
for (int l = 0; l < 2; ++l)
{
ret[retnum][l] = studentPair[i][l];
}
}
}
if (isadd) break;
}
}
}
for (int i = 0; i < retnum; ++i)
{
for (int j = 0; j < num[i]; ++j)
{
retst[i] += strengrh[ret[i][j]];
}
cout << retst[i] << endl;//输出 retst中最大的
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询