選挙のソート[制作時間: 58分45秒]
今日は、選挙のソートをしました。
説明からすると、演説する毎に立候補者の支持者が1減り、その減った分演説者の支持が増えるというものです。
ですが、今回は成功しませんでした。
たぶんですが、最後の出力が原因だと思っています。
支持者数1位だけを出力するのに対し、1人しか出力できないようにしてしまいました。
これでは、支持者数が被った場合が、出力できないことに気づきました。
ほかにミスを発見された方はコメントお願いします!!
#include <stdio.h> int main(void){ int candidates; //立候補者 int voter; //有権者 int numSpeech; //演説回数 scanf("%d", &candidates); scanf("%d", &voter); scanf("%d", &numSpeech); int speaker; //演説者 int supporter[candidates + 1]; //支持者 + 指示していない人 // 初期化 ////////////////////////////////// for(int i = 0; i <= candidates; i++) { supporter[i] = 0; //立候補者の支持者を初期化 if(i == candidates) { supporter[i] = voter; //最後の配列に全有権者を入れる } } /////////////////////////////////////////// // 実行 /////////////////////////////////// for(int i = 0; i < numSpeech; i++) { scanf("%d", &speaker); for(int j = 0; j <= candidates; j++) { if(supporter[j] != 0) { supporter[j] -= 1; supporter[i] += 1; } } } /////////////////////////////////////////// // ランク付け ///////////////////////////// int result = 0; //結果 for(int i = 0; i < candidates; i++) { for(int j = i + 1; j < candidates; j++) { if(i != result) { if(supporter[result] < supporter[j]) { result = j; i = 0; } } } } /////////////////////////////////////////// // 出力 /////////////////////////////////// printf("%d",result + 1); /////////////////////////////////////////// }
真剣衰弱[制作時間:52分31秒]
読込のところで入力して、誰が何枚持っているかを
表示させるプログラムです。
ほぼほぼ未完成です。
#include <stdio.h> int main(void){ int height; // 縦列 int width; // 横列 int num; // 参加人数 // 読込/////////////////////// scanf("%d",&height); scanf("%d",&width); scanf("%d",&num); ////////////////////////////// int cardtile[height][width]; // カードの多次元配列 // 初期化////////////////////////////// for(int i = 1; i <= height; i++) { for(int j = 1; j <= width; j++) { cardtile[i][j] = 0; } } /////////////////////////////////////// // カードの読込//////////////////////// for(int i = 1; i <= height; i++) { for(int j = 1; j <= width; j++) { scanf("%d",&cardtile[i][j]); } } /////////////////////////////////////// int gameLog; // ログの回数 // 読込//////////////////// scanf("%d",&gameLog); /////////////////////////// int player[num]; // プレイヤーの得点 // 初期化//////////////////// for(int i = 0; i < num; i++) { player[i] = 0; } ///////////////////////////// int row, row2; // 行 int column, column2; // 列 int turn = 0; // ターン // ゲーム基礎・得点配分///////////////// for(int i = 0; i < gameLog; i++) { // 読込/////////////// scanf("%d",&column); scanf("%d",&row); scanf("%d",&column2); scanf("%d",&row2); ////////////////////// // カードが同じだったら2点 if(cardtile[column][row] == cardtile[column2][row2]) { player[turn] += 2; } //違ったら次の人に変更 else { if(turn == num - 1) { turn = 0; } else { turn += 1; } } } //////////////////////////////////////// // 結果発表/////////////////////// for(int i = 0; i < num; i++) { printf("%d\n",player[i]); } ////////////////////////////////// }