問題
整数の並びが入力されたとき,同じ値が連続する個所を「同値部分配列」と定義する.
入力から,最長の同値部分配列を見つけ,それに含まれる整数の値と、配列の長さを報告するプログラムを作成せよ.
最長の同値部分配列が二つ以上あった場合は,最後に現れたものについて報告せよ.
なお,各々整数は空白もしくは改行で区切られるとする.
入力:
入力の数値はいずれも整数(負のことも0のこともある)であり、空白または改行で区切られている.
入力は標準入力から与えられる.キーボードからの入力であれば、 その最後に C-d が入力される.数値が何も現れずに入力が終わることはない.
出力:
最後の最多個数連続していた箇所について,その個数とその数値とを空白1個で区切って1行に出力せよ.
例:
入力例1
0 1 1 1 2 0 0
出力例1
3 1
入力例2
1 1 1 3
1 2 2
2
3
出力例2
3 2
質問内容
以下の入力のときにうまく数が数えられないのですがどうすればうまくうごきますか?
-11 -11 10 -3 -3 -3 2
2 -1111 -1111 -1111 -1111 -111
-111
-111 -111
ーーーーーーーーーーーーーーーーーー
1 1 1 1 2 2 0 0
0 1
コード
C
1#include<stdio.h> 2int main(void){ 3 int a[10000]; 4 int count=1; 5 int ans_num,ans_cnt=0; 6 int i=0,j=0; 7 8 while(1){ 9 if((scanf(" %d",&a[i]))==EOF) break; 10 printf("%d:\n",a[i]); 11 i++; 12 } 13 14 for(j=0;j<i-1;j++){ 15 if(j!=0){ 16 if(a[j]==a[j-1]){ 17 count++; 18 } 19 else{ 20 if(ans_cnt<=count){ 21 ans_cnt=count; 22 count=1; 23 ans_num=a[j-1]; 24 } 25 } 26 } 27 } 28 29 if(ans_cnt<=count){ 30 ans_cnt=count; 31 ans_num=a[j-1]; 32 } 33 printf("%d %d\n",ans_cnt,ans_num); 34 return 0; 35}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/21 02:56
2020/05/21 03:01
2020/05/21 03:10
2020/05/21 03:11
2020/05/21 03:17
2020/05/21 03:19
2020/05/21 05:40 編集
2020/05/21 05:49