ある問題のプログラムを綺麗にしたいです

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
JOISO

ある問題のプログラムを綺麗にしたいです

#1

投稿記事 by JOISO » 12年前

https://www.ioi-jp.org/joi/2010/2011-yo ... yo-t1.html
ここのサイトの問題のプログラムを作ってみました。

コード:

#include <stdio.h>

int main(int argc, const char * argv[])
{

    // insert code here...
    int a,b,c,d,x,y;
    double goukei;
    scanf("%d%d%d%d",&a,&b,&c,&d);
    goukei = a+b+c+d;
    x = goukei / 60;
    y = (goukei /60 - x)*60+0.999;
    printf("%d\n%d",x,y);
    return 0;
}

かなり無理矢理に作ったのでとても美しいとは言えないプログラムになってしまいました。
バグ、計算ミスが少なく、かつ綺麗にまとめるとどのようになるのかが知りたいです。
どなたか解答の作成お願いしますm(_ _)m

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: ある問題のプログラムを綺麗にしたいです

#2

投稿記事 by h2so5 » 12年前

計算機は計算ミスをしません。

コード:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
	int i, sec, sum = 0;
	div_t res;
	for (i = 0; i < 4; ++i) {
		scanf("%d", &sec);
		sum += sec;
	}
	res = div(sum, 60);
	printf("%d\n%d", res.quot, res.rem);
	return 0;
}

ISLe
記事: 2650
登録日時: 15年前
連絡を取る:

Re: ある問題のプログラムを綺麗にしたいです

#3

投稿記事 by ISLe » 12年前

こういうのはどうでしょう。

コード:

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    div_t res;
    int sum, sec;
    for (sum = 0; scanf("%d", &sec) == 1; sum += sec);
    res = div(sum, 60);
    printf("%d\n%d", res.quot, res.rem);
    return 0;
}

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: ある問題のプログラムを綺麗にしたいです

#4

投稿記事 by みけCAT » 12年前

個人的には
・コマンドライン引数を使用しないならmainの引数はvoid
・変数のスコープは必要最低限
・(ほとんどの)オンラインジャッジが要求するように、行の最後は必ず改行を入れる(質問のプログラムとは出力が変わるが)
・div関数は使わず、普通に書いたほうが可読性が上がる(気がする)
 →苦Cにも「この関数より、演算子 / や % を使うことをお勧めする。」と書いてある
がいいと思います。
これに従うと、

コード:

#include <stdio.h>

int main(void) {
	int i,sum=0;
	for(i=0;i<4;i++) {
		int input;
		scanf("%d",&input);
		sum+=input;
	}
	printf("%d\n%d\n",sum/60,sum%60);
	return 0;
}
このようになりました。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る