難易度 ☆☆☆☆
課題0: 足し算
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
printf("%d\n", a + b);
return 0;
}
課題1: 切り捨て
#include <stdio.h>
int main(){
int a;
scanf("%d", &a);
printf("%d\n", a / 1000 * 1000);
return 0;
}
課題2: 切り上げ
#include <stdio.h>
int main(){
int a;
scanf("%d", &a);
printf("%d\n", (a + 999) / 1000 * 1000);
return 0;
}
課題3: 四捨五入
#include <stdio.h>
int main(){
int a;
scanf("%d", &a);
printf("%d\n", (a + 500) / 1000 * 1000);
return 0;
}
課題4: 秒と分
#include <stdio.h>
int main(){
int a;
scanf("%d", &a);
printf("%d:%d\n", a / 60, a % 60);
return 0;
}
課題5: 1次方程式
#include <stdio.h>
int main(){
int a, b;
scanf("%d %d", &a, &b);
printf("%.2f\n", -b / (double)a);
return 0;
}
難易度 ★☆☆☆
課題10: 絶対値
#include <stdio.h>
int main(){
double a;
scanf("%lf", &a);
if(a < 0){
printf("%.2f\n", -a);
}
else {
printf("%.2f\n", a);
}
return 0;
}
課題11: お釣り
#include <stdio.h>
int main(){
int m;
scanf("%d", &m);
if(m / 10000 > 0){
printf("10000 %d\n", m / 10000);
m %= 10000;
}
if(m / 5000 > 0){
printf("5000 %d\n", m / 5000);
m %= 5000;
}
if(m / 1000 > 0){
printf("1000 %d\n", m / 1000);
m %= 1000;
}
if(m / 500 > 0){
printf("500 %d\n", m / 500);
m %= 500;
}
if(m / 100 > 0){
printf("100 %d\n", m / 100);
m %= 100;
}
if(m / 50 > 0){
printf("50 %d\n", m / 50);
m %= 50;
}
if(m / 10 > 0){
printf("10 %d\n", m / 10);
m %= 10;
}
if(m / 5 > 0){
printf("5 %d\n", m / 5);
m %= 5;
}
if(m > 0){
printf("1 %d\n", m);
}
return 0;
}
別解
#include <stdio.h>
int main(){
int m, i;
int c[] = { 10000, 5000, 1000, 500, 100, 50, 10, 5, 1 };
scanf("%d", &m);
for(i = 0; i < 9; ++i){
if(m / c[i] > 0){
printf("%d %d\n", c[i], m / c[i]);
m %= c[i];
}
}
return 0;
}
課題12: 日数
#include <stdio.h>
int main(){
int y, m;
scanf("%d %d", &y, &m);
switch(m){
case 1:
printf("31\n");
break;
case 2:
if((y % 4 == 0 && y % 100 != 0) || y % 400 == 0){
printf("29\n");
}
else {
printf("28\n");
}
break;
case 3:
printf("31\n");
break;
case 4:
printf("30\n");
break;
case 5:
printf("31\n");
break;
case 6:
printf("30\n");
break;
case 7:
case 8:
printf("31\n");
break;
case 9:
printf("30\n");
break;
case 10:
printf("31\n");
break;
case 11:
printf("30\n");
break;
case 12:
printf("31\n");
break;
}
return 0;
}
難易度 ★★☆☆
課題20: 倍数
#include <stdio.h>
int main(){
int a, m;
int i, s = 0;
scanf("%d %d", &a, &m);
for(i = a; i <= m; i += a){
s += i;
}
printf("%d\n", s);
return 0;
}
課題21: 最小値と最大値
#include <stdio.h>
int main(){
int n, x, i;
int min, max;
scanf("%d", &n);
scanf("%d", &min);
max = min;
for(i = 0; i < n - 1; ++i){
scanf("%d", &x);
if(x > max){
max = x;
}
if(x < min){
min = x;
}
}
printf("%d %d\n", min, max);
return 0;
}
課題22: 素数判定
#include <stdio.h>
int main(){
int x, i;
scanf("%d", &x);
for(i = 2; i < x; ++i){
if(x % i == 0){
break;
}
}
if(i == x){
printf("prime number\n");
}
else {
printf("not prime number\n");
}
return 0;
}
課題23: フィボナッチ数
#include <stdio.h>
int main(){
int n, i;
int f1 = 1, f2 = 1, t;
scanf("%d", &n);
for(i = 2; i < n; ++i){
t = f1 + f2;
f1 = f2;
f2 = t;
}
printf("%d\n", f2);
return 0;
}
課題24: 最大公約数
#include <stdio.h>
int main(){
int a, b, t;
scanf("%d %d", &a, &b);
if(a < b){
t = a;
a = b;
b = t;
}
// ユークリッドの互除法
while(b != 0){
t = a;
a = b;
b = t % b;
}
printf("%d\n", a);
return 0;
}
課題25: 2進数
#include <stdio.h>
int main(){
int n, d, i;
scanf("%d", &n);
// 先に 2^15 を求める
d = 2;
for(i = 0; i < 14; ++i){
d *= 2;
}
for(i = 0; i < 16; ++i){
printf("%d", n / d);
n %= d;
d /= 2;
}
printf("\n");
return 0;
}
別解
#include <stdio.h>
int main(){
int n, i;
scanf("%d", &n);
for(i = 0; i < 16; ++i){
printf("%d", (n >> (15 - i)) & 1);
}
printf("\n");
return 0;
}
難易度 ★★★☆
課題30: 配列
#include <stdio.h>
int main(){
int i, n, x;
int f[10];
for(i = 1; i < 10; ++i){
f[i] = 0;
}
scanf("%d", &n);
for(i = 0; i < n; ++i){
scanf("%d", &x);
f[x] = 1;
}
for(i = 1; i < 10; ++i){
if(f[i] == 0){
printf("%d\n", i);
}
}
return 0;
}
課題31: アルファベット
#include
int main(){
int i, min;
char s[11];
scanf("%s", s);
// 大文字を小文字に変換
for(i = 0; s[i] != '\0'; ++i){
if('A' <= s[i] && 'Z' >= s[i]){
s[i] += 'a' - 'A';
}
}
min = s[0];
for(i = 1; s[i] != '\0'; ++i){
if(min > s[i]){
min = s[i];
}
}
printf("%c\n", min);
return 0;
}
課題32: 辞書順
#include
#include
int main(){
char s[3][4];
char t[4];
int i;
for(i = 0; i < 3; ++i){
scanf("%s", s[i]);
}
if(strcmp(s[0], s[1]) > 0){
strcpy(t, s[0]);
strcpy(s[0], s[1]);
strcpy(s[1], t);
}
if(strcmp(s[1], s[2]) > 0){
strcpy(t, s[1]);
strcpy(s[1], s[2]);
strcpy(s[2], t);
}
if(strcmp(s[0], s[1]) > 0){
strcpy(t, s[0]);
strcpy(s[0], s[1]);
strcpy(s[1], t);
}
printf("%s%s%s\n", s[0], s[1], s[2]);
return 0;
}
課題33: 連想配列
#include
#include
typedef struct {
char key[11];
int val;
} Node;
int main(){
char cmd[6], key[11];
Node map[10];
int n, v;
int i, j;
for(i = 0; i < 10; ++i){
map[i].key[0] = '\0';
}
scanf("%d", &n);
for(i = 0; i < n; ++i){
scanf("%s", cmd);
scanf("%s", key);
if(strcmp(cmd, "store") == 0){
scanf("%d", &v);
}
for(j = 0; j < 10; ++j){
if(strcmp(map[j].key, key) == 0){
if(strcmp(cmd, "fetch") == 0){
printf("%d\n", map[j].val);
}
else {
map[j].val = v;
}
break;
}
}
if(j == 10){
for(j = 0; j < 10; ++j){
if(map[j].key[0] == '\0'){
strcpy(map[j].key, key);
map[j].val = v;
break;
}
}
}
}
return 0;
}
難易度 ★★★★
課題40: 素数
#include
#include
#define
char prime[MAX];
// エラトステネスの篩
void eratosthenes(){
int i, j;
int max = sqrt(MAX) + 2;
for(i = 2; i < max; ++i){
if(prime[i] == 0){
for(j = i + i; j < MAX; j += i){
prime[j] = 1;
}
}
}
}
int main(){
int i, n;
int count = 0;
eratosthenes();
scanf("%d", &n);
for(i = 2; i < MAX; ++i){
if(prime[i] == 0){
++count;
if(count == n){
printf("%d\n", i);
break;
}
}
}
return 0;
}
課題41: ソート
#include
// 選択ソート
void select_sort(int *p, int n){
int i, j;
int min_idx, temp;
for(i = 0; i < n - 1; ++i){
min_idx = i;
for(j = i + 1; j < n; ++j){
if(p[min_idx] > p[j]){
min_idx = j;
}
}
temp = p[i];
p[i] = p[min_idx];
p[min_idx] = temp;
}
}
int main(){
int i, n;
int x[10];
scanf("%d", &n);
for(i = 0; i < n; ++i){
scanf("%d", &x[i]);
}
select_sort(x, n);
for(i = 0; i < n; ++i){
if(i > 0){
printf(" ");
}
printf("%d", x[i]);
}
printf("\n");
return 0;
}