• ベストアンサー

点数の大きい順に出力する

leaz024の回答

  • leaz024
  • ベストアンサー率75% (398/526)
回答No.2

最初→3 6 2 7 4 だとすると test[s] test[t]   3    6  交換→6 3 2 7 4 t++   6    2  t++   6    7  交換→7 3 2 6 4 t++   7    4  ループt END s=1,t=2 ※一番大きい値が左端になる   3    2  t++   3    6  交換→7 6 2 3 4 t++   6    4  ループt END s=2,t=3 ※2番目に大きい値が、左から2番目になる     : というような感じになります。

yosiyosi
質問者

補足

>test[s] test[t]   3    6  交換→6 3 2 7 4 t++ なぜ3と6が交換されるのか解りません。 ifというのは、もしその文がそのとうり(正しい)であれば実行されるのですよね。 if(3 > 6) で交換するのでしょうか?

関連するQ&A

  • ややこしいコード

    #include<iostream> using namespace std; int main() { const int num = 5; int test[num]; cout << num << "人の点数を入力して下さい。\n"; for (int i = 0; i < num; i++) { cin >> test[i]; } for (int s= 0; s < num - 1; s++) { for (int t = s + 1; t < num; t++) { if (test[t] > test[s]) { int tmp = test[t]; test[t] = test[s]; test[s] = tmp; } } } for (int j = 0; j < num; j++) { cout << j + 1 << "番目の人の点数は" << test[j] << "です。\n"; } return 0; } 配列を並べ替える(ソート)する練習コードなんですが、 ちょっとややこしいので解りやすく教えて欲しいです。 因みに点数は、 22,80,57,60,50の順でお願いします。

  • ところどころ理屈の解らない記述

    #include<iostream> using namespace std; int main() { const int num = 5; //変数numを5の値で初期化、constを使うから値の変更はない int test[num]; //int型の配列testを初期化 cout << num << "人の点数を入力してください。\n"; //変数numを出力して点数入力を促す for (int i = 0; i < num; i++) { //int型のiを0で初期化 numよりiが小さい場合 iを1増やす cin >> test[i]; //上のfor文によって配列の点数を5回入力 } for (int s = 0; s < num - 1; s++) {  for (int t = s + 1; t < num; t++) { if (test[t] > test[s]) { int tmp = test[t]; test[t] = test[s]; test[s] = tmp; } } } for (int j = 0; j < num; j++) { cout << j + 1 << "番目の人の点数は" << test[j] << "です。\n"; } return 0; } 解るところは、コメントしてあります。 それ以外で解らないところがあるので、(特にnumの後ろにつく-1の意味が解らない) どうかご回答お願いします。

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

    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になっているのかということです。 どなたかわかる方がいらっしゃったらよろしくお願いします。

  • icpcの過去問

    問題→ http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=1147&lang=jp 自分の回答→ #include <iostream> using namespace std; int numbers[105]; int order(int n,int num){ if(num==0){numbers[0]=n;} else{ for(int i=0;i<num;i++){ if((numbers[num-(i+1)])>n){//cout << "here1"; numbers[num-i]=numbers[num-(i+1)];//cout << "here2"; numbers[num-(i+1)]=n;//cout << "here3"; } } } return 0; }//昇順に並べる int main(){ int n; while(cin>>n,n){ int count,answer; for(int i=0;i<n;i++){int Numb; cin >> Numb;if(i==2){cout << "here";} order(Numb,i); count++; }//昇順に要素が並んだ for(int i=1;i<count-1;i++){ answer += numbers[i]; } answer = answer/(count-2); cout << answer << endl; } } 実行結果→ 3 7 6 5 Bus error となってしまいます。最後の入力の時に、cinされずにbuserrorになるのですがなぜなのでしょうか。

  • 点数の最高得点を知るプログラム

    #include<iostream> using namespace std;  int main() {  int i;  int box[5]; cout << "テストの点数を入力してください。\n"; for (int i = 0; i < 5; i++) { cin >> box[i]; } return 0; } for文で 点数を入力まで行ったのですが、 関数で配列を使って入力した最大値を調べるプログラムの練習問題なんですが、 何回もエラー出てしまいよく解っていません。 関数からポインタまで配列でどうつかうかがよく解ってないんだと思います。 良かったら教えてください、お願いします。

  • c++ で *の逆三角旗を作りたいです

    普通の三角旗はできましたが逆三角旗が分かりません 例えば3と入力したら * ** *** ** * こんな感じで出力させたいのですが考え方が分かりません 普通の方のコードはこんな感じです int i, j; cin>>num; for (i = 1;i <= num;++i) { for (j=1;j<=i;j++) { cout << "*"; } cout << endl; } for (i = 1;i <= num-1 ;i++) { for (j=1;j<=num-i;j++) { cout << "*"; } cout << endl; } cout << endl;

  • POJ 2718

    #include <iostream> #include <cstdio> #include <algorithm> #include <vector> using namespace std; int numbers[10]; int length; int n; int permutation(int num[10]){ int i; int oneco=0; for(i=0;i<length;i++){ if(num[i]){oneco++;} } int length2 = length-oneco; if((oneco==length)||(oneco==0)){return 1000000000;} if(abs(length2-oneco)>=2){return 1000000000;} vector<int> one; vector<int> two; for(int i=0;i<length;i++){ if(num[i]){one.push_back(numbers[i]);} else{two.push_back(numbers[i]);} } int len1 = one.size(); int len2 = two.size(); //cout << len1 << len2 << endl; // int num1[10];int num2[10]; vector<int> num1; vector<int> num2; //cout << one[1] << one[2] << endl; int count1=0;int count2 = 0; sort(one.begin(),one.end()); sort(two.begin(),two.end()); do{ int num=0; for(int i=1;i<len1;i++){ int onei = one[i]; for(int i2=0;i2<i;i2++){ onei = onei*10; } num = num + onei; }//cout << num << endl; if(one[0]==0){num = num;} else {num = num + one[0];} num1.push_back(num); //cout << num << endl; count1++; }while(next_permutation(one.begin(),one.end())); do{ int num = 0; for(int i=1;i<len2;i++){ int twoi = two[i]; for(int i2 =0;i2<i;i2++){ twoi = twoi*10; } num = num + twoi; // cout << num << endl; }//cout << "here" << num << endl; if(two[0]==0){num = num;} else {//cout << num ; num = num + two[0]; //cout << " " << num << endl; } num2.push_back(num); //cout << "here" << num << endl; count2++; }while(next_permutation(two.begin(),two.end())); int ans = 1000000000; //cout << len2; int dummy1 = 1; for(int x=1;x<len1;x++){ dummy1 = dummy1*10; }//cout << dummy1; int dummy2 = 1; for(int x=1;x<len2;x++){//cout << dummy2<< endl; dummy2 = (dummy2)*10; //cout << dummy2<< endl; }//cout << dummy2; for(int i=0;i<count1;i++){//cout << num1[i] << dummy1 << endl; if((num1[i]%dummy1)==num1[i]){if(num1[i]!=0){continue;}} for(int i2=0;i2<count2;i2++){ if((num2[i2]%dummy2)==num2[i2]){if(num1[i]!=0){continue;}} ans = min(ans,abs(num1[i]-num2[i2])); } } return ans; } //int permutation(int i[10]){return 1;} int dfs(int i,int num[10]){ if(i==length) return permutation(num); num[i]=0; int ans1 = dfs(i+1,num); num[i]=1; int ans2 = dfs(i+1,num); return min(ans1,ans2); } int main(){ cin >> n; getchar(); for(int i=0;i<n;i++){ /*for(length=0;length<10;length++){ cin >> numbers[length]; char c = getchar(); if(c=='\n'){break;} }*/ string str; while(1){ char c = getchar(); if(c=='\n'){break;} str += c;} length = 0; for(int i2=0;i2<str.length();i2=i2+2){ numbers[length] = (int)str[i2]-'0'; length++; } // cout << length; int dummy[10] = {0,0,0,0,0,0,0,0,0,0}; cout << dfs(1,dummy) << endl; } } 上記のどこが間違っているか教えてください。POJの2718です。書いてあるテストは通りました。

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

    int Sutar(int i, int j) { for (i = 1; i <= 5; i++) { for (j = 0; j < i; j++) { cout << "★¥n"; } cout << "¥n"; } return i, j; } int main() { int i; cout << "★を何個出力しますか?¥n"; cin >> i; cout << "★を" << Sutar(i, j) << "個出力に成功しました。¥n"; return 0; } これで、実行したらエラー発生しました。エラーを治す方法を教えてください。

  • 選択ソートについて

    ------------------------------------- #include<stdio.h> int main(void) { int min,s,t,i,j; int num[]={5,6,4,9,2}; for(i=0;i<4;i++){ min=num[i]; s=i;        ////◎1 for(j=i+1;j<5;j++){ if(num[j]<min){ min=num[j]; s=j; } } t=num[i]; num[i]=num[s]; num[s]=t; } for(i=0;i<5;i++){ printf("%d ",num[i]); } putchar('\n'); return 0; } -------------------------------------- 以上のプログラムで◎1の記述が無くても正常にソートしてくれたので疑問に思いました。 「s=i;」が無い場合、最初のループのif文で、 if(num[j]<min){ min=num[j]; s=j; } 「6<5」を比べる時、条件に見合わないので、sに何も代入されず、 t=num[i]; num[i]=num[s]; num[s]=t; 以上の記述で、sが初期化されてないので、その時点のエラーが出ると思ったんですが、出ないで正常に動きました。 何故なのか教えてもらえると嬉しいです。

  • 素数

    Limit以下の素数をすべて表すプログラムなんですが実行した結果 ________________________________ Input Upper Limit:11 s[0]=3 s[1]=5 s[2]=5 s[3]=5 s[4]=7 s[5]=7 s[6]=7 s[7]=7 s[8]=7 s[9]=9 となるんですが s[0]=3 s[1]=5 s[2]=7 s[3]=9 にしたいですがどうすればいいのでしょうか? 教えてください。 ________________________________ #include<iostream> using namespace std; int main(void) { int Limit; int i,j,n; int s[256]; n=0; cout<<"Input Upper Limit:"; cin>>Limit; for(i=1;i<Limit;i++) { for(j=2;j<i;j++) { if(i%j==0) break; s[n]=i; cout<<"s["<<n<<"]="<<s[n]<<"\n"; n++; } } return 0; }