“动态”if语句c ++

时间:2011-10-24 15:48:24

标签: c++

我想制作一个可以根据团队生成足球比赛的程序。条件:

  • 每个人都必须和所有人一起玩
  • 必须要进行巡视。

例如:我们有4个团队:a,b,c和d。

这是一个示例解决方案:

Round 1:
a-b
c-d

Round 2:
a-c
b-d

Round 3:
a-d
c-b

我有一个函数可以在每个人都和大家一起玩时生成一个数组。

例如:

a-b
a-c
a-d
b-c
b-d
c-d

但我必须对此进行排序。我按照这种方式对函数进行排序,我在每一轮中都是第一个:

Round 1:
a-b
x-x

Round 2:
a-c
x-x

Round 3:
a-d
x-x

在这种情况下,我可以使用简单的if语句安排缺少的那些。我检查每一轮,两个x不能是a和b。通过这种方式,它可以排序。但问题是我在一轮比赛中至少有3支球队。

Round 1:
a-b
x-x
y-y

我有3个循环,所以如果我有一个“动态”if语句,它可以与任何团队排序。

我的意思是这样我不需要只检查两个不能是a和b的x,因为我得到了两个不能是a,b,c和d的y-y。

如果语句动态,那么有没有办法做到这一点?

因为:

if (iTR[x][0] != iT[i][0] && iTR[x][0] != iT[i][1])

只能检查一个地方,但我需要检查的地方越来越多。

很抱歉写这么复杂,但我写得不容易。并提前谢谢你!

3 个答案:

答案 0 :(得分:2)

你的措辞并不完全清楚。但它听起来(......也许?)就像你有一个工作代码不会让你开心,因为你在循环中运行if语句,而不是{{1}的“更强大”变体}}。这种“动态if”会同时进行任意数量的比较,从而不再需要循环。

所以也许你不关心的事情是:

if

你正在想象一些行为方式相同的东西,但更像是:

vector<int> v;
...
bool noOnes = true;
for (vector<int>::iterator i = v.begin(); i != v.end(); i++) {
    if (*i == 1) {
        noOnes = false;
        break;
    }
}
if (noOnes) {
    cout << "No values in the vector were 1";
}

如果我已经正确地猜到了你的问题的精神,那么提出这个问题是合理的。但首先要指出的是,C ++(和其他软件环境)中的“动态”一词具有特定含义,与此无关。它通常与“静态”相反,您可以通过搜索来阅读术语:

https://stackoverflow.com/search?q=difference+between+static+and+dynamic+%5Bc%2B%2B%5D

对于C ++“内置”的技术,它可以让你在没有包含循环的代码的情况下表达这些东西......它存在。标准库中有一个名为vector<int> v; ... // pseudocode, I'm making this "ifall" syntax up ifall(v, != 1) { cout << "No values in the vector were 1"; } 的标题,其中“定义了一系列特别设计用于元素范围的函数

http://www.cplusplus.com/reference/algorithm/

使用它,你可以测试一个向量中的任何元素是否不是1,例如...说... <algorithm>并传递一个函数来测试特定元素是否是一个人:

find_if

循环完全在bool IsOne(int i) { return (i == 1); } ... vector<int> v; ... if (find_if(v.begin(), v.end(), IsOne) == v.end())) { cout << "No values in the vector were 1"; } 算法内部处理。无论好坏,我很少看到人们在“真实世界”的代码库中使用find_if。我想大多数早期的C ++课程会告诉你不要担心它,并使用循环得到正确的答案和正确的答案。你是否想要走下这个特殊的兔子洞取决于你。

答案 1 :(得分:0)

为什么你不能这样做:

for(int ww =0; ww < numRounds; ww++)
  for(int zz =0; zz < numRounds; zz++)
    if(iTR[x][zz] != iT[i][ww])

答案 2 :(得分:0)

我不确定你的问题。从微不足道的意义上说,几乎每一个都是动态的。如果它是完全静态的,编译器会优化它。

我相信你不明白你的作业是什么。理解算法比在C ++这样的特定语言中编码算法更具问题。

但是,作为提示,您可以考虑编写一个计算复杂(或动态)条件的效用函数。

希望这会有所帮助。