Elec Days

電子工作やelectric的なこと、日常の出来事について、紹介していきます。
Elec Days TOP  >  スポンサー広告 >  プログラミング  >  情報オリンピック >  第11回日本情報オリンピック (JOI 2011/2012)予選練習の解答例②(第四問~第六問)

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- --:-- ] スポンサー広告 | TB(-) | CM(-)

第11回日本情報オリンピック (JOI 2011/2012)予選練習の解答例②(第四問~第六問)

こんばんは

第11回日本情報オリンピック (JOI 2011/2012)予選練習の解答例①(第一問~第三問)の続きです。

・ソースファイル
・yosenrensyu4.c
・yosenrensyu5.c
・yosenrensyu6.c

・実行ファイル
・yosenrensyu4.exe
・yosenrensyu5.c
・yosenrensyu6.c



ソースコード

問題4の修復を完了しました。これで正常に実行されるはずです。
問題4:
正整数 N が与えられたとき,N の階乗 (N!) を求めるプログラムを作成せよ.

<yosenrensyu4.c>
#include 

int main(void)
{
FILE *fp;
unsigned int ansp, ansr, ans1=1, ans2=0, ans3;
unsigned short int ansy, i/* カウント */, z=0, a=7;
int ax;/* N */

fp = fopen("2012-pr-t4-in.txt", "r");

fscanf(fp, "%d", &ax);

fclose(fp);

for(i=1; i<=ax; i++){
ansp = 1000000000/i;
ansr = 1000000000 - (1000000000/i)*i;
if(ansp < ans1){
ansy = ans1 / ansp;
ans1 %= ansp;
ans1 *= i;
if(ans1 < ansr*ansy){
ansy--;
ans1 = 1000000000 + ans1 - ansr*ansp;
}
else{
ans1 -= ansr*ansy;
}

}
else{
ans1 *= i;
ansy = 0;
}

ans2 = ans2*i + ansy;

if(z < 1){
if(ans1%10 == 0){
ans1 /= 10;
z++;
}
}
}

fp = fopen("2012-pr-t4-out.txt", "w");

if(ans2 != 0){
fprintf(fp,"%d", ans2);
ans3 = ans1 / 10;
while(ans3 != 0){
if(a == 0)
break;
a--;
ans3 /= 10;
}
while(a > 0){
fprintf(fp,"0");
a--;
}
}
fprintf(fp,"%d", ans1);

for(i=0; i fprintf(fp, "%d", 0);
}

fclose(fp);

return 0;
}


入力例(2012-pr-t4-in.txt)
4


出力例(2012-pr-t4-in.txt)
24



問題5:
正整数 N (1 ≦ N ≦ 100000000 (=108)) が与えられたとき,3N を 100000 (=105) で割った余りを求めるプログラムを作成せよ.

<yosenrensyu5.c>
#include 

int main(void)
{
FILE *fp;
int ans=1, n, i;

fp = fopen("2012-pr-t5-in.txt", "r");

fscanf(fp, "%d", &n);

fclose(fp);

n %= 5000;

for(i=0; i ans *= 3;
ans %= 100000;
}

fp = fopen("2012-pr-t5-out.txt", "w");

fprintf(fp, "%d", ans);

fclose(fp);

return 0;
}


入力例(2012-pr-t5-in.txt)
5


出力例(2012-pr-t5-out.txt)
243



問題6:
記録されている名前を全て小文字に変更するプログラムを作成せよ. ただし,同じ名前の人が複数出てくることもある.

<yosenrensyu6.c>
#include 
#include

int main(void)
{
FILE *fp1, *fp2;
short int p, a, b;
char str[23];

fp1 = fopen("2012-pr-t6-in.txt", "r");
fp2 = fopen("2012-pr-t6-out.txt", "w");

fscanf(fp1, "%d%*c", &p);
for(a=0; a fgets(str, 22, fp1);

for(b=0; b<23; b++){
if(str[b] == NULL)
break;
str[b] = tolower(str[b]);
}

fprintf(fp2, "%s", str);
}

fclose(fp1);
fclose(fp2);

return 0;
}


入力例(2012-pr-t4-in.txt)
4
ABCDEFGHIJKLM
NOPQRSTUVWXYZ
abcdefghijklm
nopqrstuvwxyz


出力例(2012-pr-t4-in.txt)
abcdefghijklm
nopqrstuvwxyz
abcdefghijklm
nopqrstuvwxyz


「こんな命令いらない」とか、「ここはどんなことやってるの?」という疑問とかありましたら、ばしばしコメントお願いします。


では
関連記事
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

プロフィール

elecho

Author:elecho
 
ElecDays にようこそ!!

趣味は、電子的なもの(電子工作やコンピュータ)なので、そういうものについて書くと思います。
あと、学生です。

よろしくお願いします。



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。