Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C/C+中将循环间隔减少1+;_C++_C_Algorithm_Loops_For Loop - Fatal编程技术网

C++ 在C/C+中将循环间隔减少1+;

C++ 在C/C+中将循环间隔减少1+;,c++,c,algorithm,loops,for-loop,C++,C,Algorithm,Loops,For Loop,假设我有15个元素。我希望以这样一种方式对他们进行分组: group1 = 1 - 5 group2 = 6 - 9 group3 = 10 - 12 group4 = 13 - 14 group5 = 15 这样,我将获得每个组中的元素,如下所示: group1 = 5 group2 = 4 group3 = 3 group4 = 2 group5 = 1 正如您所看到的,循环间隔正在减小 我拿15只作为例子。在实际的程序中,它是用户驱动的参数,可以是任何东西(希望是几千个) 现在我要找的

假设我有15个元素。我希望以这样一种方式对他们进行分组:

group1 = 1 - 5
group2 = 6 - 9
group3 = 10 - 12
group4 = 13 - 14
group5 = 15
这样,我将获得每个组中的元素,如下所示:

group1 = 5
group2 = 4
group3 = 3
group4 = 2
group5 = 1
正如您所看到的,循环间隔正在减小

我拿15只作为例子。在实际的程序中,它是用户驱动的参数,可以是任何东西(希望是几千个)

现在我要找的是: 组1中的任何内容都应该有变量“loop”值0,组2应该有1,组3应该有2,依此类推。。。“loop”是一个int变量,用于计算其他内容

我们也换个说法吧 我有一个名为“loop”的int变量。我希望通过以下方式为其赋值: 第一个n帧循环值0下一个(n-1)帧循环值1然后下一个(n-2)帧循环值2一直到循环值(n-1)

假设我的时间表上有15帧

因此n将是5===>>>>>(5+4+3+2+1=15;因为间隔减少了1)

然后

前5帧(1-5)循环为0,然后下4帧(6-9)循环为1,然后下3帧(10-12)循环为2,然后下2帧(13-14)循环为3,最后一帧(15)循环为4

frames       "loop" value
1 - 5    =>     0
6 - 9    =>     1
10 - 12  =>     2
13 - 14  =>     3
15       =>     4
我试过模(%)。但问题是第12帧的循环是2,所以(12%(5-2))余数是0,所以它增加了循环值。 以下几行是在解算器中运行的示例代码@循环默认为0,@Frame是当前处理帧编号

int loopint = 5 - @loop;

if (@Frame % loopint == 0)
    @loop += 1;

如果我理解正确,那么

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[]) {
  int n = atoi(argv[1]);

  for(int i = 1; i <= n; ++i) {
    printf("%d: %f\n", i, ceil((sqrt(8 * (n - i + 1) + 1) - 1) / 2));
  }
}
如果你想在开始时进行短距离拉伸,向上舍入这个值可以给我们一个解决方案,也就是说1,2,2,3,3,3

由于您希望拉伸逐渐变短,我们必须颠倒顺序,因此S变为(n-S+1)。因此,上面的公式

编辑:请注意,除非数据集中的元素数精确地符合n*(n+1)/2模式,否则在开始或结束时都会有较短的拉伸。此实现将不规则拉伸放置在开始处。如果你想把它们放在最后

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[]) {
  int n = atoi(argv[1]);

  int n2    = (int) ceil((sqrt(8 * n + 1) - 1) / 2);
  int upper = n2 * (n2 + 1) / 2;

  for(int i = 1; i <= n; ++i) {
    printf("%d: %f\n", i, n2 - ceil((sqrt(8 * (upper - i + 1) + 1) - 1) / 2));
  }
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
int n=atoi(argv[1]);
int n2=(int)ceil((sqrt(8*n+1)-1)/2);
int上限=n2*(n2+1)/2;

对于(inti=1;i如果我正确理解了这一点,那么

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[]) {
  int n = atoi(argv[1]);

  for(int i = 1; i <= n; ++i) {
    printf("%d: %f\n", i, ceil((sqrt(8 * (n - i + 1) + 1) - 1) / 2));
  }
}
如果你想在开始时进行短距离拉伸,向上舍入这个值可以给我们一个解决方案,也就是说1,2,2,3,3,3

因为你想让拉伸逐渐变短,我们必须颠倒顺序,所以S变成(n-S+1)。因此上面的公式是这样的

编辑:请注意,除非数据集中的元素数精确地符合n*(n+1)/2模式,否则在开始或结束时都会有较短的拉伸。此实现将不规则拉伸放置在开始处。如果希望将其放置在结束处

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main(int argc, char *argv[]) {
  int n = atoi(argv[1]);

  int n2    = (int) ceil((sqrt(8 * n + 1) - 1) / 2);
  int upper = n2 * (n2 + 1) / 2;

  for(int i = 1; i <= n; ++i) {
    printf("%d: %f\n", i, n2 - ceil((sqrt(8 * (upper - i + 1) + 1) - 1) / 2));
  }
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
int n=atoi(argv[1]);
int n2=(int)ceil((sqrt(8*n+1)-1)/2);
int上限=n2*(n2+1)/2;

对于(int i=1),Ic和C++是不同的语言。选择一个。或者选择您的代码实际上是编写的语言,它不是一个。它是用VX()写的,和C类似。我在寻找算法。C或C++中的一个是好的。您可以忽略“@”。在变量名之前签名。Frame是当前处理帧,您可以将其视为当前索引。int-loop=0;int-loopint=5-loop;if(Frame%loopint==0)loop+=1;我无法理解您的意思。在我看来,这一切在命名方面都是一团糟(除了可能的情况,这些名字来自你的现实问题,它们与通常的编程环境无关)。一般来说,我觉得这是一种XY问题(见Meta SE)。你能描述一下你正在解决的真实问题,而不是循环递减(?)递增(?)的小部分吗一个变量叫做环C和C++是不同的语言。选择一个。或者选择你的代码实际上是写在语言中的,它看起来不是一个。它是用VX()写的,和C类似。我在寻找算法。C或C++中的一个很好。你可以忽略“@”。在变量名之前签名。Frame是当前处理帧,您可以将其视为当前索引。int-loop=0;int-loopint=5-loop;if(Frame%loopint==0)loop+=1;我无法理解您的意思。在我看来,这一切在命名方面都是一团糟(除了可能的情况,这些名字来自你的现实问题,它们与通常的编程环境无关)。一般来说,我觉得这是一种XY问题(见Meta SE)。你能描述一下你正在解决的真实问题,而不是循环递减(?)递增(?)的小部分吗一个叫做loop的变量?