2017-03-15 13 views
0

私はデバッガ(onlinegdb)のC++ベクトル入力 - 実行時エラー - アウトデバッグ回 - FAILING FIRST FOR LOOP

2 1 /newline/ 
4 

出力と標準入力のための私のC++プログラムをデバッグしようとしています: - ながら2行目は質問によって提供される別の入力のために読み込まれていました。今回は、ベクトルarrは出力を表示していません4 argsを設定 /home/a.out..doneからシンボルを読み込みます。
(gdb)continue
プログラムが実行されていません。
(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.そう、プログラムのループの最初の部分が正しく実行されていないのはなぜですか?

SOURCEコード -

#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

ないことが問題ですが...確か私が正しく理解していればtがあるため、場合に問題

ルックはif (m<arr[i])(つまりは、あなたのケースです1であり、唯一有効なarr[i]arr[0]であり、これは2であるmよりも大きいものです。

あなたの実際のコードはarr[i]が4 arr[0]、およびm == 2である、あなたが3から

 for (int j = 3 ; j > 2 ; j++) 
      sum -= comb(4, j) * pow(9, 5 - j); 

のでjスタートとなっコーディングとj > 2までをインクリメントしていることを思い出し

 for(int j=arr[i]-1;j>m;j++) 
      sum=sum-comb(arr[i],j)*pow(9,arr[i]-j+1); 

です。 j 3から開始し、インクリメントされ、これまでに大きい場合は

2.私はあなたのコードはjをデクリメントすべきであると仮定していること。何かのように

 for (auto j = arr[i] - 1 ; j > m ; ++j) 
      sum -= comb(arr[i], j) * pow(9, arr[i]-j+1); 
0

@ max66は、あなたのプログラムがループに詰まっている理由を指摘しています。

は、ベクトルARRは、私はあなたの入力が正しくそれを読んでいると思わ出力4.

を示していない理由を私に説明してみましょう。しかし、gdbはまだそれを印刷していません。出力はバッファリングされているので、画面に同時に印刷する必要はありません。cout。 そうしたい場合は、出力をフラッシュする必要があります。

for(int i=0;i<t;i++) 
    cout<<arr[i]<<" "<<flush; 
関連する問題