• ベストアンサー

C言語 99年秋季 第2種情報処理午後の問題

ぜんぜんわかりません。今日プログラミングを始めたばかりなので、何を見ればいいのかすらもわかりません。どなたかご指導よろしくお願いいたします。 問 電車の運賃を考える。10kmまでは150円、10~20Kmまでは1kmあたり30円、21~40kmまでは1kmあたり20円…と加算するものとする。距離を配列D、料金を配列Pを用いてあらわし、35kmの時の料金を求める。(1km未満は切り上げる)  1 10     1 150 2 20     2  30 3 40     3  20 4 80     4  15 5 160    5  10 配列 D       配列 P この問題を解くためのプログラミングを教えてください。よろしくお願いします。  

質問者が選んだベストアンサー

  • ベストアンサー
  • itope
  • ベストアンサー率18% (3/16)
回答No.2

ぱっと書いたんで汚いですが。。。 とりあえずソースと簡単なコメントを書いておきます (半角スペース、tabが効かないんで、インデントぐちゃぐちゃです。。。すいません) -----ここから----- #include<stdio.h> void main(){ int nedan=0; int kyori=0; int D[5]; int P[5]; int i; //ループ用 int j; //ループ用 //配列Dの初期化 D[0]=10; D[1]=20; D[2]=40; D[3]=80; D[4]=160; //配列Pの初期化 P[0]=150; P[1]=30; P[2]=20; P[3]=15; P[4]=10; //この部分については、実際にはscanfなどの数値を入れるようにする方が実用的 kyori=40; //下から始まるwhile文には、距離がD[0]+1以上(つまり、11以上)でないと入らないようにするため //(距離が10以下の場合には、一律で値段が決まるから、while文に入る必要がない i=D[0]+1; nedan=P[0]; //値段の初期値 //iが距離以内の場合は、ループを継続 while(i<=kyori){ //配列Dのどの部分に当てはまるかを調べるためのfor文 for(j=0;j<=4;j++){ if(i>D[j] && i<=D[j+1]) nedan = nedan + P[j+1]; //値段を追加 } i++; } } -----ここまで----- 下の方がおっしゃっているように、答えを聞いただけで「へぇー、そうなるんだぁー」という勉強法も、ないわけではないと思いますが、なかなか身につきづらいように思います 問題を見た際に、どのようなアルゴリズムにすればできそうかを考えてみることが大事で、その上で、問題で穴埋めになっているソースや、解答を見ながら、それらがどのようなアルゴリズムで組み立てられているのかを考えてみると、いろんなパターンが身につくようになるかもしれません。。。 僕は、正確にソースをかけなくても、まずはアルゴリズムだと思っています

その他の回答 (2)

  • jyopper
  • ベストアンサー率66% (2/3)
回答No.3

#1のものです。 失礼しました。憶測で回答して・・・m(_ _)m 新人研修ですか、大変ですね。 研修ならなおさら勉強すべきですよ。本当に・・・ 周りの人は理解しながらすすんでいて、差がつきます。 では、がんばってください。

atch
質問者

お礼

回答していただいてありがとうございました。助かりました。 これをもとに、じっくり勉強していきたいと思います。

  • jyopper
  • ベストアンサー率66% (2/3)
回答No.1

先ほども質問されていたようですが、 恐らく今月情報処理を受験しようと考えているようだと 感じました。 午後の問題(もしくは合格したいようなら)は C言語で受験するなら 先にある程度の知識を勉強した方がいいのでは? ただ答えを聞いて勉強しても 基本情報は簡単だといっても不合格になりますよ。 すみません、勝手なことをいって・・・

atch
質問者

補足

いえ、自分は試験を受けるわけではなく、会社の新人研修の課題なのです。 今週末までにレポートを出さなくてはならず、今日からプログラミングをはじめた身としてはいかんともしがたいのです。