dポイントプレゼントキャンペーン実施中!

あるプログラミングサイトの問題です。
著作権の問題でサイト名と正確な問題は言えませんが、ご了承ください
その日一日の始値と終値と最大値と最小値があります。
最初に、何日分のデータを与えられるかを標準入力nで与えられて、そのあとn日分の始値と終値と最大値と最小値が標準入力で与えられます。
そこからn日の中での始値と終値と最大値と最小値を出力せよという問題です。
ちなみに1<=n<=1000で、1<=始値と終値と最大値と最小値<=1000000です
#include <stdio.h>
int main(void){
int n,i,j,s1[100][100],max,min,fin;
max=0;
min=1000000;
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<4;j++){
scanf("%d",&s1[i][j]);
if(s1[I][j]>max){
max=s1[I][j];
}
if(s1[i][j]<min){
min=s1[i][j];
}
if(i==n-1){
fin=s1[i][1];
}
}

}
printf("%d %d %d %d",s1[0][0],fin,max,min);
return 0;
}
僕はこのようにプログラミングしました。
提出前の確認動作では結果は正解になるのですが、これを提出して検査を受けるとランタイムエラーで失敗となります。
for文の繰り返しのところで時間がかかってランタイムエラーになるのかなと思っているのですが、はっきりとした原因と直し方がわかりません。
どなたかご教授お願いします。

A 回答 (3件)

よく読んだら僕の理解力不足でしたw


いつものことですのでご勘弁を

どうぞ参考にしてください
#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int arr[n][4];
for (int i=0; i<n; i++) {
scanf("%d %d %d %d", &arr[i][0], &arr[i][1], &arr[i][2], &arr[i][3]);
}
int max=1, min=1000000;
printf("%d ", arr[0][0]);
for (int i=0; i<n; i++) {
for (int j=0; j<4; j++) {
if(arr[i][j]>max) max=arr[i][j];
if(arr[i][j]<min) min=arr[i][j];
}
}
printf("%d %d %d\n", arr[n-1][3], max, min);
return 0;
}
    • good
    • 0
この回答へのお礼

確かにこっちの方が随分シンプルです!
丁寧な回答ありがとうございます!

お礼日時:2019/04/03 22:30

質問文をよく読んでみると


>最初に、何日分のデータを与えられるかを標準入力nで与えられて、そのあとn日分の始>値と終値と最大値と最小値が標準入力で与えられます。
>そこからn日の中での始値と終値と最大値と最小値を出力せよという問題です。

初値、終値、最大値、最小値を受け取り
ただそれを出力するだけに読み取れますが正しいですか?
もしそれが正しいならこんなややこしいことしなくても良いのでは?

#include <stdio.h>
int main(){
int n;
scanf("%d", &n);
int arr[n][4];
for (int i=0; i<n; i++) {
scanf("%d %d %d %d", &arr[i][0], &arr[i][1], &arr[i][2], &arr[i][3]);
}
for (int i=0; i<n; i++) {
printf("%d %d %d %d\n", arr[i][0], arr[i][1], arr[i][2], arr[i][3]);
}
return 0;
}
    • good
    • 0

s1[i][j]のiがいくつか大文字になってるのは大丈夫?

    • good
    • 0
この回答へのお礼

すみません。
質問を書いてる時に修正したものが間違っただけですので、大丈夫です。

お礼日時:2019/04/03 19:28

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!