C言語で以下の問題を出題されたのですが、以下で入れた配列データが、
while文を抜けると初期化されてしまい。
最後の答えを出すことができずに困っております。
大変申し訳ございませんが、どなたかご教示お願いします。
while(strInt[i] != '\0'){
※以下の配列部分にデータが入っているのは確認できるのですが、
次のwhile文でデータを取り出すと全て0になっています
ans[i] = sqrt(box*(box-num1)(box-num2)(box-num3));
最大の三角形
3本の棒の組みが与えらたとき、それの棒の端点同士を接着して三角形を作ることを考える。3本の棒の組みが何組か与えられたとき、出来上がる三角形の面積が最大になるのが何番目の組みのものであったかを調べたい。それぞれの組みの棒の長さが標準入力から与えられるとして、最大の面積を構成する棒の組みの番号を必要最小限の桁数で1行として標準出力に書き出すプログラムを作れ。最大の面積をもつものが複数あるときは、一番若い番号を書き出すこと。
#include <stdio.h> #include <stdint.h> #include <inttypes.h> #include <math.h> #include <string.h> //プログラム開始 int main(int argc, char *argv[]){ //変数定義 int strInt[1000]; int strInt2[3]; int ans[100]; int n=0; int i=0; int j=0; int num1; int num2; int num3; int x=0; int box=0; int box2=1; i=0; //標準入力値を全て配列に入れる while(scanf("%d",&n)!=EOF){ strInt[i]=n; i++; } //配列データがなくなるまでループを行う i = 0; j = 0; while(strInt[i] != '\0'){ strInt2[j] = strInt[i]; if(((i+1)%3) == 0){ num1 = strInt2[0]; num2 = strInt2[1]; num3 = strInt2[2]; box = (num1+num2+num3)/2; ans[i] = sqrt(box*(box-num1)*(box-num2)*(box-num3)); j=0; } else{ j++; } i++; } printf("%d\n",ans[0]); x=1; i=0; while(ans[i] != '\0'){ if( 0 > ans[i]){ box2 = 0; x++; i++; } else if(box2 < ans[i]){ box2 = ans[i]; x++; i++; printf("22%d\n",x); } else if(box2 == ans[i]){ box2 = ans[i]; i++; printf("33%d\n",x); } } //count=(i+1)/3; //出力 printf("%d\n",x); //プログラム終了 return 0; } コード
回答3件
あなたの回答
tips
プレビュー