単純計算
ABC211-A
問題概要
与えられた整数a,bに対し、実数 (A−B)/3+B を計算せよ。
解答
#n=gets.chomp.to_i
a,b=gets.chomp.split(" ").map(&:to_i)
ans=(a+2*b)/3.0
puts ans
上がコンテスト中に提出したコード。(2021-07-24 21:05:33)
Cで書いたコードが以下。(2024-05-22 22:46:09)
int readint(char *s);
#include<stdio.h>
#include<stdlib.h>
#define N1 8
int main(void){
char* s1=(char*)malloc(sizeof(char)*N1);
if (s1==NULL){
printf("memory allocation to s1 failed.\n");
exit(1);
}
char *ts1=fgets(s1,N1,stdin);
if(ts1==NULL){
printf("fgets(s1) failed\n");
exit(1);
}
int i=0;
int a=readint(s1+i);
while(*(s1+i)!=32)i++;
i++;
int b=readint(s1+i);
// printf("a=%d b=%d\n",a,b);
double c=(a-b)/(double)3+b;
printf("%lf\n",c);
return 0;
}
int readint(char *s){
int i=0,ret=0;
while(*(s+i)>=48 && *(s+i)<=57){
ret*=10;
ret+=*(s+i)-48;
i+=1;
}
return ret;
}
ABC212-A
問題概要
与えられた2数のうち一方は0か。
解答
#n=gets.chomp.to_i
ans=""
a,b=gets.chomp.split(" ").map(&:to_i)
if 0<a and b==0 then
ans="Gold"
elsif a==0 and 0<b then
ans="Silver"
else
ans="Alloy"
end
puts ans
上がコンテスト中に提出したコード。(2021-07-31 21:04:02)
Cで書いたコードが以下。(2024-05-24 22:40:00)
int readint(char *s);
#include<stdio.h>
#include<stdlib.h>
#define N1 9
int main(void){
char* s1=(char*)malloc(sizeof(char)*N1);
if (s1==NULL){
printf("memory allocation to s1 failed.\n");
exit(1);
}
char *ts1=fgets(s1,N1,stdin);
if(ts1==NULL){
printf("fgets(s1) failed\n");
exit(1);
}
int i=0;
int a=readint(s1+i);
while(*(s1+i)!=32)i++;
i++;
int b=readint(s1+i);
// printf("a=%d b=%d\n",a,b);
if (a>0 && b==0){
printf("Gold\n");
}else if (a==0 && b>0){
printf("Silver\n");
}else if(a>0 && b>0){
printf("Alloy\n");
}
return 0;
}
int readint(char *s){
int i=0,ret=0;
while(*(s+i)>=48 && *(s+i)<=57){
ret*=10;
ret+=*(s+i)-48;
i+=1;
}
return ret;
}
数値の範囲の条件判定
ABC214-A
問題概要
与えられた整数が125以下ならば4、126以上211以下ならば6、212以上ならば8を出力。
解答
n=gets.chomp.to_i
ans=4
if n>=126 and n<=211 then
ans=6
elsif n>=212 then
ans=8
end
puts ans
上がコンテスト中に提出したコード(2021-08-14 21:04:53)
Cで書いたコードが以下。(2024-06-10 22:35:18)
int readint(char *s);
#include<stdio.h>
#include<stdlib.h>
#define N1 5
int main(void){
char* s1=(char*)malloc(sizeof(char)*N1);
if (s1==NULL){
printf("memory allocation to s1 failed.\n");
exit(1);
}
char *ts1=fgets(s1,N1,stdin);
if(ts1==NULL){
printf("fgets(s1) failed\n");
exit(1);
}
int n=readint(s1);
int ans=0;
if(n<126)ans=4;
else if(n<212)ans=6;
else ans=8;
printf("%d\n",ans);
return 0;
}
int readint(char *s){
int i=0,ret=0;
while(*(s+i)>=48 && *(s+i)<=57){
ret*=10;
ret+=*(s+i)-48;
i+=1;
}
return ret;
}
条件判定、出力形式
ABC216-A
問題概要
小数部分が1桁の実数が与えられる。整数部分の後ろに、その小数第1位の数が2以下ならば-、7以上ならば+をつけて出力せよ。
解答
x,y=gets.chomp.split(".")
y=y.to_i
ans=x
if y<3
ans+="-"
elsif y>=7
ans+="+"
end
puts ans
この回は本番不参加。コンテストが日曜開催だったため、この日にコンテストがあることを把握できていなかった。
Rubyで書いたのに続けてCで書いたが、その間AtCoderの過去問を解くのをお休みしていたため、両コードの間で3カ月余り時間が空いている。
上がrubyで書いたコード。(2024-06-26 22:40:43)
Cで書いたのが以下。(2024-10-02 22:33:01)
int readint(char *s);
#include<stdio.h>
#include<stdlib.h>
#define N1 6
int main(void){
char* s1=(char*)malloc(sizeof(char)*N1);
if (s1==NULL){
printf("memory allocation to s1 failed.\n");
exit(1);
}
char *ts1=fgets(s1,N1,stdin);
if(ts1==NULL){
printf("fgets(s1) failed\n");
exit(1);
}
int x,y;
int i=0;
int s=readint(s1+i);
while(*(s1+i)!=46)i++;
if(i==1){
x=*s1-48;
}else if(i==2){
x=(*s1-48)*10+(*(s1+1)-48);
}else{
printf("error\n");
}
i++;
y=readint(s1+i);
// printf("x=%d y=%d\n",x,y);
printf("%d",x);
if(y<3){
printf("%c\n",45);
}else if(y<7){
printf("\n");
}else{
printf("%c\n",43);
}
return 0;
}
int readint(char *s){
int i=0,ret=0;
while(*(s+i)>=48 && *(s+i)<=57){
ret*=10;
ret+=*(s+i)-48;
i+=1;
}
return ret;
}
条件分岐
ABC219-A
問題概要
①0 点以上 40 点未満、②40 点以上 70 点未満、③70 点以上 90 点未満、④90 点以上、とランクが分かれている。ある点数が与えられるが、上位のランクになるためには最低あと何点必要か。ただし、既に90 点以上の場合はexpertと出力。
解答
x=gets.chomp.to_i
#s=gets.chomp.split("").to_a
ans=0
if x>=90 then
puts "expert"
elsif x>=70 then
puts 90-x
elsif x>=40 then
puts 70-x
else
puts 40-x
end
上がコンテスト中に提出したコード。(2021-09-18 21:05:36)
Cで書いたのが以下。(2024-10-09 22:22:40)
int readint(char *s);
#include<stdio.h>
#include<stdlib.h>
#define N1 5
int main(void){
char* s1=(char*)malloc(sizeof(char)*N1);
if (s1==NULL){
printf("memory allocation to s1 failed.\n");
exit(1);
}
char *ts1=fgets(s1,N1,stdin);
if(ts1==NULL){
printf("fgets(s1) failed\n");
exit(1);
}
int x=readint(s1);
if(x>=90){
printf("expert\n");
}else if (x>=70){
printf("%d\n",90-x);
}else if (x>=40){
printf("%d\n",70-x);
}else {
printf("%d\n",40-x);
}
return 0;
}
int readint(char *s){
int i=0,ret=0;
while(*(s+i)>=48 && *(s+i)<=57){
ret*=10;
ret+=*(s+i)-48;
i+=1;
}
return ret;
}
0 件のコメント:
コメントを投稿