"Dynamic" if 语句 C++

"Dynamic" if statement c++

本文关键字:C++ 语句 if Dynamic      更新时间:2023-10-16

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

  • 每个人都必须和每个人一起玩
  • 必须以轮为单位

例如:我们有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语句吗?

因为这个:

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

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

很抱歉写得这么复杂,但我不能写得更简单。提前感谢大家!

从你的措辞看不太清楚。但是听起来(也许吧?)你的工作代码不让你高兴,因为你在循环中运行if语句,而不是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";
}

你想象的东西会以同样的方式运行,但更像:

vector<int> v;
...
// pseudocode, I'm making this "ifall" syntax up
ifall(v, != 1) {
    cout << "No values in the vector were 1";
}
如果我没猜错你问题的实质,那么问这个问题是合理的。但首先要指出的是,在c++(和其他软件环境)中,"动态"一词具有特定的含义,与此实际上没有任何关系。它通常是"静态"的反义词,您可以通过一些搜索来阅读术语:

https://stackoverflow.com/search?q=difference + +静态+和+动+ % bc % 2 b % 2 b % 5 d

至于c++"内置"的技术,它可以让你在不包含循环的代码中表达这些东西……它的存在。在标准库中有一个名为<algorithm>的头文件,"定义了一组特别设计用于元素范围的函数"

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

使用这个,你可以测试一个向量中是否有元素不为1,比如…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算法内部处理。不管是好是坏,我很少看到人们在"现实世界"的代码库中使用<algorithm>。我想大多数早期的c++课程都会告诉你不要担心这个问题,只要使用循环就可以得到正确的答案。你想不想掉进这个兔子洞取决于你。

你为什么不这样做呢?

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

我不大明白你的问题。在一个微不足道的意义上,几乎每一个if都是动态的。如果它是完全静态的,编译器会把它优化出来。

我相信你没有理解你的作业是关于什么的。这更多的是理解算法的问题,而不是用特定的语言(如c++)编写算法的问题。

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