選挙のソート[制作時間: 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]);
}
//////////////////////////////////
}