余りによる数字の分類と割合の計算プログラム

このQ&Aのポイント
  • 複数の正の整数値を入力し、41で割り切れる数の個数、41で割ると1余る数の個数、41で割ると40余る数の個数とそれらの全体の個数に対する割合を出力するプログラム。
  • 入力データに対して、10で割れる数の個数と割合を算出し、10で割ると1余る数の個数と割合を算出する。
  • 入力データに対して、それぞれの余りの個数と全体に対する割合を計算して出力する。
回答を見る
  • ベストアンサー

どこを変えたらいいか教えて下さい。

余りによる数字の分類 [問題]複数の正の整数値を入力し( 0 で入力を終了し,その 0 はデータ数に含めない),41 で割り切れる数の個数,41で割ると 1 余る数の個数,・・・,及び,41 で割ると 40 余る数の個数とそれらの全体の個数に対する割合(%で表示し,小数点以下は切り捨て)を出力するプログラムを書け.出力データは,上で述べた順番で,個数と割合をペアーにし,以下に示すような形式で出力すること(コメントの部分は含まない) 15 2 // 10 で割れる数の個数と全体に対する割合 10 25 // 10 で割ると 1 余る数の個数と全体に対する割合 ・・・ #include <iostream> int main() { int i1, data, k, n = 0, x[10] = {0}, y[10]; // データの入力 std::cin >> data; while (data > 0) { k = data % 10; x[k]++; n++; std::cin >> data; } // 割合の計算 for (i1 = 0; i1 < 10; i1++) y[i1] = 100 * x[i1] / n; // 出力 for (i1 = 0; i1 < 10; i1++) std::cout << x[i1] << " " << y[i1] << std::endl; return 0; }

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

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

そもそもそのプログラムで どこで何をしているのか は理解できているのですか?

関連するQ&A

  • あっているか教えてください。

    #include <iostream> int main() { int i1, k1, k2; std::cin >> k1 >> k2; while (k1 > 0 || k2 > 0) { for (i1 = 0; i1 < k1; i1++) std::cout << "A"; for (i1 = 0; i1 < k2; i1++) std::cout << "B"; std::cout << std::endl; std::cin >> k1 >> k2; } return 0; } このプログラムで下記のような問題 図形の出力 [問題]いくつかの整数データの組が入力されるものとする.各組のデータは,それぞれ,1行に出力する文字数を表しており,最初のデータは文字 G の出力数,また,次のデータは文字 A の出力数を表しているものとする.データを読み込み,指定された出力を行うプログラムを書け.なお,データは,「0 0」を入力することによって終了するものとする がじっこうできるでしょうか。.

  • どこを変えればいいか教えてください。

    2次元平面上の点と原点との距離 [問題]平面上の点の数 n( n ≦ 100 ),及び,n 個の点の座標を配列 x,及び,y に読み込み,原点 (0, 0) からの平均距離を計算した後,平均距離,原点からの距離が(平均距離-4)以上で,かつ,(平均距離+18)以下であるすべての点の座標,及び,その数を出力するプログラムを書け(座標は,入力された順に出力). (入力例) コメントの部分は除く 3 // 点の数 10 20 // 1 番目の点の x 及び y 座標 30 20 // 2 番目の点の x 及び y 座標 20 30 // 3 番目の点の x 及び y 座標 (出力例) コメントの部分は除く 31.49・・・ // 平均距離 30 20 // 2 番目の点の x 及び y 座標 20 30 // 3 番目の点の x 及び y 座標 2 // 点の数 #include <iostream> #include <math.h> int main() { double mean = 0.0, x[100], y[100], r[100]; int i1, k = 0, n; // _ ̐ std::cin >> n; // _ ̍ W ̓ ͂ƕ ϋ ̌v Z for (i1 = 0; i1 < n; i1++) { std::cin >> x[i1] >> y[i1]; r[i1] = sqrt(x[i1] * x[i1] + y[i1] * y[i1]); mean += r[i1]; } mean /= n; // i ϋ {10 j ȏ㗣 ꂽ _ ̏o std::cout << mean << std::endl; for (i1 = 0; i1 < n; i1++) { if (r[i1] >= mean+10.0) { std::cout << x[i1] << " " << y[i1] << std::endl; k++; } } std::cout << k << std::endl; return 0; }

  • どこを変えればいいですか?

    2次元平面上の2点間の距離 [問題]平面上の点の数 n( n ≦ 100 ),及び,n 個の点の座標を配列 x,及び,y に読み込み,すべての点の間の距離を計算し,その距離が最大になる点の組(2つの点の座標.最初に入力した点の座標を最初),及び,その距離を出力するプログラムを書け. (入力例) コメントの部分は除く 3   // 点の数 0 10   // 1 番目の点の x 及び y 座標 0 0   // 2 番目の点の x 及び y 座標 20 0   // 3 番目の点の x 及び y 座標 (出力例) コメントの部分は除く 0 10   // 1 番目の点の x 及び y 座標 20 0   // 3 番目の点の x 及び y 座標 22.36・・・   // 2点間の距離 #include <iostream> #include <math.h> int main() { double max = 0.0, x[100], x1, y[100], y1, r; int i1, i2, n, m1, m2; // 点の数 std::cin >> n; // 点の座標の入力 for (i1 = 0; i1 < n; i1++) std::cin >> x[i1] >> y[i1]; // 点間の距離の計算 for (i1 = 0; i1 < n-1; i1++) { for (i2 = i1+1; i2 < n; i2++) { x1 = x[i1] - x[i2]; y1 = y[i1] - y[i2]; r = sqrt(x1 * x1 + y1 * y1); if (r > max) { max = r; m1 = i1; m2 = i2; } } } // 出力 std::cout << x[m1] << " " << y[m1] << std::endl; std::cout << x[m2] << " " << y[m2] << std::endl; std::cout << max << std::endl; return 0; }

  • どこを変えればいいですか?

    先に入力されたデータのチェック [問題]全部で 20 個の整数データを順に入力するものとする.その際,各データを入力する毎に,新たに入力されたデータが,すでに入力されたデータと異なる場合だけ,そのデータを出力するプログラムを書け.なお,データは,1行に1つずつ出力せよ. #include <iostream> int main() { int i1, i2, n = 0, x[20], data, sw; for (i1 = 0; i1 < 20; i1++) { std::cin >> data; sw = 0; for (i2 = 0; i2 < n && sw == 0; i2++) { if (data == x[i2]) sw = 1; } if (sw == 0) { std::cout << data << std::endl; x[n] = data; n++; } } return 0; }

  • どこを変えればいいですか?

    上位 m 人の出力 [問題]学籍番号と試験の点数のペアーを入力するものとする(「 0 0 」を入力すると終了し,データ数は 100 以下である).なお,データは,学籍番号順に入力されるわけではない.このとき,試験の点数の上位 7 人の学籍番号と試験の点数を,点数が高い順に出力するプログラムを書け.ただし,同じ点数の学生がいた場合は,最初に入力されたデータを優先するものとする.結果は,学籍番号と点数を1つ以上のスペースで区切り,1行に一人ずつ出力せよ. #include <iostream> int main() { int i1, k, n = 0, m = 0, no[100], ten[100], sw[100] = {0}, k1, k2; // データの入力 std::cin >> k1 >> k2; while (k1 > 0 || k2 > 0) { no[n] = k1; ten[n] = k2; n++; std::cin >> k1 >> k2; } // 上位 5 人の出力 while (m < 5) { k = -1; for (i1 = 0; i1 < n; i1++) { if (sw[i1] == 0 && (k < 0 || ten[i1] > ten[k])) k = i1; } std::cout << no[k] << " " << ten[k] << std::endl; sw[k] = 1; m++; } return 0; }

  • 設定した値が意図せぬ値に

    POJ 3176の問題です。 http://poj.org/problem?id=3176 #include <iostream> #include <algorithm> #define MAX 100 using namespace std; int main() { int n; cin >> n; int line[n-1][MAX]; int num[n-1][MAX]; cin >> line[0][0]; if(n==0) { cout << 0 <<endl; return 0; } else if(n==1) { cout << line[0][0] << endl; return 0; } for (int i =1;i < n;i++) { for (int j=0;j < i+1;j++) { int x; cin >> x; line[i][j]= x; } } for (int k= 0 ; k<n;k++) { num[n-1][k]= line [n-1][k]; } for (int k= n-2; k > 0 ; k--) { for (int l=0 ; l<k+1; l++) { num[k][l] = max (num[k+1][l],num[k+1][l+1]) + line[k][l]; } } num[0][0] = max(num[1][0],num[1][1]) + line[0][0]; cout << line[0][0] <<" "<<num[0][0]<<endl; return 0; } 入力 4 3 1 3 1 2 3 1 3 4 5 出力 1 12 最後に出力でline[0][0]をするようにしているのはバグチェックのためです。 ここで僕がわからないのはどうしてline[0][0]が3で宣言し、ほかでいじっていないにも関わらず、最後に1になっているのかということです。 どなたかわかる方がいらっしゃったらよろしくお願いします。

  • 合計値を求める関数

    #include<iostream> using namespace std; //sum関数の定義 int sum(int x, int y) { return x + y;  } int main() { int num1, num2, ans; cout << "1番目の整数を入力して下さい。\n"; cin >> num1; cout << "2番目の整数値を入力して下さい。\n"; cin >> num2; ans = sum(num1, num2); cout << "合計は" << ans << "です。\n"; return 0; }  ここのreturn x+y;の所の合計値を戻り値として返す処理の仕組みを解りやすく教えて欲しいです、戻り値はちょっと解りづらいです、よろしくお願いします。

  • C言語/プログラミング

    int Trianglearea(int x, y) { return x * y / 2; } int main() { int x, y, ans; cout << "底辺を入力してください。\n"; cin >> x; cout << "高さを入力してください。\n"; cin >> y; cout << "三角形の面積は" <<Trianglearea(x, y) << "です。\n"; return 0; } これで、実行したらエラー発生しました。エラーを治す方法を教えてください。

  • {x = x>y ? x:y; return x;}

    #include <iostream> using namespace std; inline int max(int x, int y){x = x>y ? x:y; return x;} int main() { int num1, num2, ans; cout << "2つの整数を入力して。\n"; cin >> num1 >> num2; ans = max(num1, num2); cout << "最大値は" << ans << "です。\n"; return 0; } の{x = x>y ? x:y; return x;}の部分の意味が解りません。

  • インライン関数の使い道と理屈

    #include <iostream> using namespace std; //max関数の定義 inline int max(int x, int y){if(x>y) return x; else return y;} int main(){ int num1, num2, ans; cout << "1番目の整数を入力して下さい。\n"; cin >> num1; cout <<"2番目の整数を入力して下さい。\n"; cin >> num2; ans = max(num1, num2); cout << "最大値は" << ans << "です。\n"; return 0; } インライン関数の処理は呼び出し部分に埋め込まれるので、プログラムの処理速度が 向上することがありますとあるんですが、 どのような時にインライン関数は使用するのでしょうか? 理由もしくみもご教示お願いします。

専門家に質問してみよう