c++ - 程序未从 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”…………。
解决方案
好吧,这里已经出错了
//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
而不是数组。与数组不同,向量可以具有可变大小。第二个改进是我只在需要时声明变量,而不是在函数开始时声明所有变量。所以我只声明NN
,S
当我知道的值N
是什么时,我就知道向量需要有多大。
推荐阅读
- mysql - 返回每个组的最大值,但是当存在平局时,在 MySQL 中返回一个具有较低 id 的值
- javascript - 如何导入 socket.io npm 包 - Nodejs
- r - 试图扩大数据框,同时通过它们的因素交互两列
- php - Codeigniter 4分页与custome mysql查询
- php - 计算一个值出现多少次 PHP
- excel - “粘性”Excel 数据透视表切片器
- arrays - C 语言,动态 3d 数组
- php - WordPress 404首页和所有页面,即使在永久链接重置后
- javascript - 如何捕获提交到 javascript 页面的 POST 请求数据?
- python - 计算列表中的值