【问题标题】:Can i generate "loop" in run time base on user input?我可以根据用户输入在运行时生成“循环”吗?
【发布时间】:2020-01-25 07:57:36
【问题描述】:

嗨,我想知道有没有办法在运行时根据用户输入创建一定数量的 for 循环?

假设我想制作一个程序,可以打印出多项选择考试的所有选择组合(基于用户输入)(每个问题有四个选择,例如:A、B、C、D )

我怎样才能做到这一点? (我制作的以下功能可以实现这一点,但所有 for 循环都是预构建的(Totol 为 15),我希望看到一些在运行时生成循环的方法。)

例如:

cout<<"Enter how many questions in the exam?"

cin>>n;  // if n is 20

cout<<"Here is all the possible combination..."
//gerateing 20 loop...

void print(char arr[],int s)
{
  int c=0;

    for(int x=0;x<s;x++)
    {
        cout<<arr[x];

        for(int i=0;i<s;i++)
        {
            cout<<arr[i];

            for(int i=0;i<s;i++)
            {
                cout<<arr[i];

                for(int j=0;j<s;j++)
                {
                    cout<<arr[j]; c++;

                    for(int j=0;j<s;j++)
                    {
                        cout<<arr[j]; c++;

                        for(int j=0;j<s;j++)
                        {
                           cout<<arr[j]; c++;

                            for(int j=0;j<s;j++)
                            {
                                cout<<arr[j]; c++;

                                for(int j=0;j<s;j++)
                                {
                                    cout<<arr[j]; c++;

                                        for(int j=0;j<s;j++)
                                        {
                                            cout<<arr[j]; c++;

                                            for(int j=0;j<s;j++)
                                            {
                                                cout<<arr[j]; c++;

                                                for(int j=0;j<s;j++)
                                                {
                                                    cout<<arr[j]; c++;

                                                    for(int j=0;j<s;j++)
                                                    {
                                                       cout<<arr[j]; c++;
                                                        for(int j=0;j<s;j++)
                                                        {
                                                            cout<<arr[j]; c++;
                                                            for(int j=0;j<s;j++)
                                                            {
                                                                cout<<arr[j]; c++;

                                                                for(int j=0;j<s;j++)
                                                                    {
                                                                        cout<<arr[j];
                                                                        c++;
                                                                    }

                                                            }


                                                        }


                                                    }


                                                }


                                            }


                                        }


                                }


                            }

                        }

                    }

                }

            }
        }
         cout<<"\n";
    }
    cout<<"TOTAL combinations (if there are 15 questions):"<<c<<"\n";
}

【问题讨论】:

  • 哎呀,在上面的代码中,我应该只在最后一个for循环中增加c哈哈
  • 看这里,是C,但概念是一样的。 stackoverflow.com/questions/49265552/nesting-for-loop-n-times/…
  • 您的代码不能满足您的要求。它将在每个循环中打印相同的数组,因此您将获得 sss...*s (与没有循环一样多的 s)并且它们不会按顺序排列。如果 A 是答案,您有 2 个选项。如果 B 是答案,则有 2 个选项。相同的 C 和 D。所以一个问题有 16 个可能的答案。生成所有这些。而不是为每个问题混合所有这些。
  • 我的代码假设有 15 个问题,所以总组合是 1073741824(4 的 15 次方),为了使“16 个可能的答案”你正在谈论的需要 2 个 for 循环(4 对 2 的幂)。我的问题是如何在运行时制作循环

标签: c++ loops for-loop runtime


【解决方案1】:

我建议您了解递归函数(在其代码中调用自身的函数),这将允许您编写每个问题所需的代码,以便从问题树中的该点确定每个可能的问题,而无需新的循环树上的每一步。该函数只需要一个 if 语句来确定是否已达到最大问题数,否则它将无限运行。一开始我发现学习递归有点棘手,但它在许多用例中非常强大。只需搜索“递归函数”,您可能会发现许多有用的资源

【讨论】:

  • 好主意,但即使我可以通过递归获得组合的数量,但是如何打印出每个选择,如何为我遇到的问题设置所有条件?如果我想进行总计“1073741824 递归调用”,加上递归将导致溢出,这是上面代码的总数 lol
  • en.wikipedia.org/wiki/Recursive_definition 这并不难.. 放心
  • 也许每次达到深度限制时都会打印一个临时数组的副本,其中包含程序当前的“状态”,该数组必须是全局的。由于深度不是 1073741824 我不认为它会导致溢出。我自己是一名 Python 程序员,但我相信会有办法的。
  • 得到这个错误:RecursionError: maximum recursion depth exceeded while calling a Python object 无论如何.. 感谢您的回答
猜你喜欢
  • 2014-04-07
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 2020-01-01
  • 2018-06-09
  • 1970-01-01
相关资源
最近更新 更多