我们如何为n是动态的循环进行N嵌套
how can we do n nested for loops where n is dynamic
我已经阅读了以下问题,但没有找到解决问题的方法:
- C++:嵌套的 for 循环的动态数量(无递归) 嵌套
- 循环的变量
实际问题陈述是:-
乔布和吉米都在玩数字。约伯给了吉米一个数字数组,并要求他告诉长度为L的非递减序列的最小可能最后一个数字。
输入格式
第一个输入行由一个大小为数组 N 的数字组成。
下一行包含数组的 N 个空格分隔的元素。
下一行包含非递减序列的长度,即 L。
输出格式
您必须打印序列的最小可能最后一个数字,如果没有长度为 L 的非递减序列,则打印 -1
示例输入
7 9 7 2 5 4 11 12 3
示例输出
11
解释
在样本输入中,长度为 L=3 的可能非递减序列是 (9,11,12) 、(7,11,12) 、(2,5,11) 、(2,4,11) 、(2,5,12) 、(2,4,12) 、(2,11,12) 、(5,11,12) 、(4,11,12),序列 (2,5,11)和 (2,4,11) 的最小最后一个数为 11。因此,答案是11。
我的代码...
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int fact(int y,int x)
{
static int temp=0;
if(temp==x)
{
temp=0;
return 1;
}
else
{
++temp;
return y*fact((y-1),x);
}
}
int main() {
int num,randmax,n,s,q,w last=-1, minlast=-1;
cin>>n;
vector<int> a(n);
for(int i=0;i<n; i++)
{
cin>>a[i];
}
cin>>s;
vector<vector<int>> c;
q=fact(s);
c.resize(q);
for(int i = 0 ; i < q ; ++i)
{
//Grow Columns by n
a[i].resize(s);
}
w=q;
randmax=n-1;
int k=0;
while(w)
{
for(int i=0 ; i<n ; i++){
}
num=rand()%randmax; // this works perfect as expected
c[][i]=a[num];
}
w--;
}
/*for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
for(int k=j+1;k<n; k++)
{
if((a[i]<=a[j])&&(a[j]<=a[k]))
{
last=a[k];
if(minlast=-1)
{
minlast=a[k];
}
if(last<minlast){
minlast=last;
}
}
}
}
}
*/
cout<<last;
return 0;
}
'
我会告诉你我试图做什么...我想到通过将它们随机分配到我的一个数组中然后计算它们来映射数据。
我在代码中的某个地方迷路了...请给我一个解决方案...一个很好的解释,就像我有时需要动态嵌套 n 循环类型的东西时陷入困境一样......
此外,如果您在我的代码或算法中进行编辑会更有帮助,这样我就可以了解我的错误在哪里......
提前感谢您的时间...
正如您的链接所指出的答案,您可以使用数组来模拟动态数量的 for 循环 David 在这里给出了一个很好的实现。
不过,对于您给出的实际问题,我认为根本不需要动态数量的 for 循环。该问题是一个标准的非递减子序列问题,略有变化。
#include <iostream>
#include <fstream>
int N, L;
int arr[100], seq[100];
int bst;
int main() {
std::ifstream file ("c.txt");
file >> N;
for(int n = 0; n < N; ++n)
file >> arr[n];
file >> L;
file.close();
bst = 1e9;
for(int i = 0; i <= N; ++i) seq[i] = 1e9;
for(int i = 0; i < N; ++i)
{
int x = 0;
while(seq[x] < arr[i]) ++x;
seq[x] = arr[i];
if(x + 1 >= L)
bst = std::min(bst, arr[i]);
}
std::cout << bst << std::endl;
return 0;
}
此代码应该可以解决您的问题。第一部分执行标准解析和初始化。其余的是LIS问题的变体,它有几个标准算法来解决它。在这里,我们只是检查每当我们扩展长度为 L 或更长的数组时,我们会看到该元素是否小于我们的电流。
相关文章:
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 了解嵌套循环打印星号图案
- 嵌套for循环C++的问题(初学者)
- 嵌套While循环不起作用(C++问题)
- 无法掌握嵌套循环的写作技巧
- 嵌套的 for 循环不循环通过第二个数组
- 在 c++ 中实现嵌套循环的更短方法吗?
- 嵌套在循环中的两个循环的 big-O 表示法
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 具有嵌套 if-else 的循环的时间复杂度
- 毕达哥拉斯三重嵌套循环误解
- T(n) 表示嵌套循环
- 如何编写嵌套的 for 循环
- 如何在C++中创建 if else 循环而不是多个嵌套?
- 迭代嵌套映射与范围为循环:没有名为"first"的成员
- 为循环嵌套的变量快速生成数字组合
- 为循环嵌套的C++压缩
- 为循环嵌套的变量
- 使用foreach循环嵌套的QHash