Closed. This question is off-topic。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
                        
                        12个月前关闭。
                                                                                            
                
        
请参见下面的代码。该代码按n *(n + 1)/ 2个迭代对数组进行排序。我从Wikipedia 1 + 2 + 3 + 4 +...中选取了公式。无需证明它,让我们假设它是可行的。

#include <stdio.h>

int A[] = {3,1,4,8,6,17};
int nruns = 0;

#define N sizeof(A) / sizeof(int)

int imin(int idx){
 int im = idx;
 for(int i = idx; i < N; ++i, ++nruns)
  if(A[i] < A[im])im = i;
 return im;
}

int swap(li, ri){
 int t = A[li];
 A[li] = A[ri];
 A[ri] = t;
 return 0;
}

int main()
{
 int im;
 for(int i = 0; i < N; ++i){
  im = imin(i);
  swap(i, im);
 }

 for(int i = 0; i < N; ++i)
  printf("%d ", A[i]);
 printf("\nN = %d\nN*N = %d\nnruns = %d\n", N, N*N, nruns);

 /*
  (n*n + n) / 2 < n*n
  Is above always true ?
 */

 return 0;
}


This code at OnlineGDB

我的问题是,“ n *(n + 1)/ 2”小于“ n * n”是否总是正确?

最佳答案

假设n > 0。然后,如果n * (n + 1) / 2 < n * n为true,则(n + 1) / 2 < n也为true,因此n + 1 < 2 * n也是如此。如果为n > 1,则为(n > 0) AND (n > 1)

假设n > 1。然后,如果n < 0为true,则n * (n + 1) / 2 < n * n也为true,因此(n + 1) / 2 > n也是如此。如果为n + 1 > 2 * n,则为n < 1

这意味着如果(n < 0) AND (n < 1),则为true。

关于c - 数学。排序。 “n *(n +1)/2”是否总是小于“n * n”? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54852265/

10-10 17:39