我正在尝试将stdin的C ++程序调试为
2 1 /newline/
4
调试器输出(onlinegdb): -
虽然第二行正在阅读由问题提供的另一组输入;这次,向量arr没有显示输出4
设置args
从/home/a.out...done中读取符号
(gdb)继续
该程序没有运行
(gdb)运行
Starting program: /home/a.out </home/input.txt
2 1
P.S. The program successfully compiles and runs for user provided input
3 2
3
4
P.S。那么,为什么程序中的循环首先不正确执行?
消息来源代码 -
#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int m;
cin>>m;
int t;
cin>>t;
cout<<m<<" "<<t<<"\n";
int sum=0;
vector<int> arr(t);
for(int i=0;i<t;i++)
cin>>arr[i]; //arr[i]=k digit nos
for(int i=0;i<t;i++)
cout<<arr[i]<<" ";
int comb(int a, int b); //6,2
for(int i=0;i<t;i++)
{
if(m==arr[i]){
cout<<m<<" a "<<9*pow(10,m-1)<<"\n";
}
if(m>arr[i]){
cout<<m<<" b "<<9*pow(10,m-1)<<"\n";
}
if(m<arr[i]){
/*if(m==arr[i]-1){
cout<<m<<" c "<<9*pow(10,arr[i]-1)-9<<"\n";
}
else{*/
sum=pow(10,arr[i])-1;
for(int j=arr[i]-1;j>m;j++)
sum=sum-comb(arr[i],j)*pow(9,arr[i]-j+1);
cout<<" d "<<sum<<"\n";
//}
}
}
//for m upto 10^4, k<=10^5; else k=10^5
return 0;
}
int comb(int a, int b) { //6,2
int j=1;
int s=a;
for(int k=a-1;k>b;k--) //5,4,3
s=s*k;
for(int l=1;l<=b;l++)
s=s/l;
return s;
}
//It is a problem involving displaying number of integers with no digit //repeating more than m (=2 here) times for t(=1) inputs with each input //being a arr[i] (=4) digit number.
答案 0 :(得分:0)
不确定是问题,但......是个问题
查看案例if (m<arr[i])
(如果我理解正确,那就是你的情况,因为t
是1;唯一有效的arr[i]
是arr[0]
,即4比2 m
更好。
您的实际代码是
for(int j=arr[i]-1;j>m;j++)
sum=sum-comb(arr[i],j)*pow(9,arr[i]-j+1);
记住,arr[i]
是arr[0]
是4,m == 2
,您的代码变为
for ( int j = 3 ; j > 2 ; j++ )
sum -= comb(4, j) * pow(9, 5 - j);
所以j
从3开始,递增直到j > 2
;但是如果j
从3开始并且递增则大于2。
我想你的代码应该减少 j
;
for ( auto j = arr[i] - 1 ; j > m ; ++j )
sum -= comb(arr[i], j) * pow(9, arr[i]-j+1);
答案 1 :(得分:0)
@ max66指出了你的程序陷入循环的原因。
让我解释为什么vector arr没有显示输出4。
我认为您的输入正在正确阅读。但是gdb尚未打印出来。由于输出是缓冲的,因此不必在cout
的同时将其打印在屏幕上。
如果你想这样做,那么你应该刷新输出。
for(int i=0;i<t;i++)
cout<<arr[i]<<" "<<flush;