首页 > 解决方案 > 程序未从 n 位数字计算每组的组合数

问题描述

问题是采用 3 个输入:1)测试用例的数量 2)数字中的位数 3)N 个空格分隔的数字

并输出:1)组数 2)每组中的组合数

我想打印这些输出,但没有组合输出在每组上都返回零

我已经尝试对问题进行故障排除和调试,但这些都不起作用....

/* Read input from STDIN. Print your output to STDOUT*/
#include<iostream>
#include <math.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
#include <limits.h>
#include <stdbool.h>

using namespace std;
int factorial (int count);

int main(int argc, char *a[])
{
//intialize variables
int i,T,b,S[i],N,NN[i],C[i],count=0;

cin >> T;

while(T>0) {
    cin >> N;


    for(i=0;i<N;i++) {


        cin >> NN[i];


        if(i<N-1) {

            S[i] = (N-i);// S[i] is Category 02

               count++;
       }//end of if

      }//end of for loop


     for(int j=0;j<N;j++) {
        C[i] = factorial(count)/(factorial(i)*factorial(count - i));//          
    }//end of for loop
      cout <<"No. of sets =" <<count++<<endl;

     for(int k=0;k<N;k++) {

        cout<<"No.of combinations on each set :";
        cout<<C[i]<<endl;
    }  // end fo for loop  

}//end of while loop

return 0;
}//end of main

int factorial(int count)
{
int i;
for(i = count-1; i > 1; i--)
    count *= i;

return count ;
}//end of function

这个输出来了:“集合 0 上的组合数量:0”“集合 1 上的组合数量:0”…………。

在此处输入图像描述

标签: c++for-loopwhile-loopc++14

解决方案


好吧,这里已经出错了

//intialize variables
int i,T,b,S[i],N,NN[i],C[i],count=0;

这里有什么价值i?回答,它没有。如果i没有值,那么这个数组的大小是NN[i]多少?回答,谁知道呢。

当你在 C++ 中声明一个数组时,你必须给它一个大小。大小不能是变量,它必须是常数。它尤其不能是没有值的变量。

您的程序具有未定义的行为。

编辑 - 这将是一个改进

#include <vector>

int main()
{
    int T;
    cin >> T;
    while (T > 0)
    {
        int N;
        cin >> N;
        std::vector<int> NN(N), S(N);
        for (int i = 0; i < N; i++)
        {
            ...

第一个改进是我使用 astd::vector而不是数组。与数组不同,向量可以具有可变大小。第二个改进是我只在需要时声明变量,而不是在函数开始时声明所有变量。所以我只声明NNS当我知道的值N是什么时,我就知道向量需要有多大。


推荐阅读