信息学奥赛一本通(C语言)

仅作研究参考,本文为使用C语言编写的代码,如需其他版本,先留言

一、语言及算法基础篇

基础(一)c语言

第一章

1000:入门测试题目

【题目描述】 

求两个整数的和。

【输入】

一行,两个用空格隔开的整数。

【输出】
两个整数的和。

【输入样例】
2 3
【输出样例】
5

#include <stdio.h>

int main() {
	int a, b;
	scanf("%d%d", &a, &b);
	printf("%d", a + b);
}
2060:【例1.1】计算机输出

【题目描述】
在屏幕上输出“Hello World!”。

【输入】
(无)

【输出】
(无)

【输入样例】
(无)
【输出样例】
Hello World!

#include <stdio.h>

int main() {
	printf("Hello World!");
}
2061:【例1.2】梯形面积

【题目描述】
在梯形中阴影部分面积是150平方厘米,求梯形面积。

【输入】
(无)

【输出】
输出梯形面积(保留两位小数)。

【输入样例】
(无)
【输出样例】
(无)

#include <stdio.h>

int main() {
    float area_of_triangle = 150.0;
    float base_of_triangle = 15.0;
    float height_of_triangle = (2 * area_of_triangle) / base_of_triangle;
    float top_base_of_trapezoid = 15.0;
    float bottom_base_of_trapezoid = 25.0;
    float area_of_trapezoid = (top_base_of_trapezoid + bottom_base_of_trapezoid) * height_of_triangle / 2;
    printf("%.2f", area_of_trapezoid);
    return 0;
}
2062:【例1.3】电影票

【题目描述】
已知一位小朋友的电影票价是10元,计算x位小朋友的总票价是多少?

【输入】
输入x。

【输出】
人数和电影票总价,中间用一个空格隔开。

【输入样例】
2
【输出样例】
2 20

#include <stdio.h>

int main() {
    int a, b=10;
    scanf("%d", &a);
    printf("%d %d", a,a * b);
    return 0;
}
2063:【例1.4】牛吃牧草

【题目描述】
有一个牧场,牧场上的牧草每天都在匀速生长,这片牧场可供15头牛吃20天,或可供20头牛吃10天,那么,这片牧场每天新生的草量可供几头牛吃1天?

【输入】
(无)

【输出】
如题述,牛的数量。

【输入样例】
(无)
【输出样例】
(无)

#include <stdio.h>

int main() {
    int c1 = 20 * 15;
    int c2 = 10 * 20;
    int daily_growth = (c1 - c2) / (20 - 10);
    printf("%d", daily_growth);
    return 0;
}
1001:Hello,World!

【题目描述】
编写一个能够输出“Hello,World!”的程序,这个程序常常作为一个初学者接触一门新的编程语言所写的第一个程序,也经常用来测试开发、编译环境是否能够正常工作。

提示:“Hello,World!”中间没空格。

【输入】

【输出】
Hello,World!

【输入样例】
(无)
【输出样例】
Hello,World!

#include <stdio.h>

int main() {
	printf("Hello,World!");
}
1002:输出第二个整数

【题目描述】
输入三个整数,整数之间由一个空格分隔,整数是32位有符号整数。把第二个输入的整数输出。

【输入】
只有一行,共三个整数,整数之间由一个空格分隔。整数是32位有符号整数。

【输出】
只有一行,一个整数,即输入的第二个整数。

【输入样例】
123 456 789
【输出样例】
456

#include <stdio.h>

int main() {
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    printf("%d", b);
    return 0;
}
1003:对齐输出

【题目描述】
读入三个整数,按每个整数占8个字符的宽度,右对齐输出它们,按照格式要求依次输出三个整数,之间以一个空格分开。

【输入】
只有一行,包含三个整数,整数之间以一个空格分开。

【输出】
只有一行,按照格式要求依次输出三个整数,之间以一个空格分开。

【输入样例】
123456789 0 -1
【输出样例】
123456789       0      -1

#include <stdio.h>

int main() {
    int a, b, c;
    scanf("%d%d%d", &a, &b, &c);
    printf("%8d %8d %8d",a, b, c);
    return 0;
}
1004:字符三角形

【题目描述】
给定一个字符,用它构造一个底边长5个字符,高3个字符的等腰字符三角形。

【输入】
输入只有一行,包含一个字符。

【输出】
该字符构成的等腰三角形,底边长5个字符,高3个字符。

【输入样例】
*
【输出样例】
  *
 ***
*****

#include <stdio.h>

int main() {
    char c;
    scanf("%c", &c);
    printf("  %c\n", c);
    printf(" %c%c%c\n", c, c, c);
    printf("%c%c%c%c%c\n", c, c, c, c, c);

    return 0;
}
1005:地球人口承载力估计

【题目描述】
假设地球上的新生资源按恒定速度增长。照此测算,地球上现有资源加上新生资源可供x亿人生活a年,或供y亿人生活b年。

为了能够实现可持续发展,避免资源枯竭,地球最多能够养活多少亿人?

【输入】
一行,包括四个正整数x,a,y,b,两个整数之间用单个空格隔开。x>y,a<b,ax<by,各整数均不大于10000。

【输出】
一个实数z,表示地球最多养活z亿人,舍入到小数点后两位。

【输入样例】
110 90 90 210
【输出样例】
75.00

#include <stdio.h>

int main() {
    int x, a, y, b;
    double G, Z;
    scanf("%d %d %d %d", &x, &a, &y, &b);
    G = (double)(x * a - y * b) / (a - b);
    Z = G;
    printf("%.2f", Z);

    return 0;
}

第二章

第一节 运算符和表达式
2064:【例2.1】交换值

【题目描述】
输入两个正整数a和b,试交换a、b的值(使a的值等于b,b的值等于a)。

【输入】
输入两个正整数a和b。

【输出】
输出a与b交换值后的结果。

【输入样例】
2 3
【输出样例】
3 2

#include <stdio.h>

int main() {
    int a, b, temp;
    scanf("%d %d", &a, &b);

    temp = a;
    a = b;
    b = temp;

    printf("%d %d", a, b);

    return 0;
}
2065:【例2.2】整数的和

【题目描述】
求3个整数的和。

输入a、b、c这3个整数,求它们的和。

【输入】
3个整数。

【输出】
三个数的和。

【输入样例】
1 2 3
【输出样例】
6

#include <stdio.h>

int main() {
    int a, b, c, sum;
    scanf("%d %d %d", &a, &b, &c);

    sum = a + b + c;


    printf("%d\n", sum);

    return 0;
}
2066:【例2.3】买图书

【题目描述】
已知小明有n元,他买了一本书,这本书原价为m元,现在打8折出售。求小明还剩多少钱(保留2位小数)。

【输入】
输入n,m。

【输出】
小明还剩多少钱(保留2位小数)。

【输入样例】
100 100
【输出样例】
20.00

#include <stdio.h>

int main() {
    float n, m, remaining;
    scanf("%f %f", &n, &m);

    remaining = n - (m * 0.8);

    printf("%.2f", remaining);

    return 0;
}
1006:A+B问题

【题目描述】
大部分的在线题库,都会将A+B问题作为第一题,以帮助新手熟悉平台的使用方法。

A+B问题的题目描述如下:给定两个整数A和B,输出A+B的值。保证A、B及结果均在整型范围内。现在请你解决这一问题。

【输入】
一行,包含两个整数A,B,中间用单个空格隔开。A和B均在整型范围内。

【输出】
一个整数,即A+B的值。保证结果在整型范围内。

【输入样例】
1 2
【输出样例】
3

#include <stdio.h>

int main() {
    int A, B;
    scanf("%d %d", &A, &B);
    printf("%d\n", A + B);

    return 0;
}
1007:计算(a+b)×c的值

【题目描述】
给定3个整数a、b、c,计算表达式(a+b)×c的值。

【输入】
输入仅一行,包括三个整数a、b、c, 数与数之间以一个空格分开。(-10,000<a,b,c<10,000)
【输出】
输出一行,即表达式的值。

【输入样例】
2 3 5
【输出样例】
25

#include <stdio.h>

int main() {
    int a, b, c, result;
    scanf("%d %d %d", &a, &b, &c);
    result = (a + b) * c;
    printf("%d\n", result);

    return 0;
}
1008:计算(a+b)/c的值

【题目描述】
给定3个整数a、b、c,计算表达式(a+b)/c的值。

【输入】
输入仅一行,包括三个整数a、b、c, 数与数之间以一个空格分开。(-10,000<a,b,c<10,000, c不等于0)

【输出】
输出一行,即表达式的值。

【输入样例】
1 1 3
【输出样例】
0

#include <stdio.h>

int main() {
    int a, b, c, result;
    scanf("%d %d %d", &a, &b, &c);
    if (c == 0) {
        printf("Error: division by zero\n");
        return 1;
    }
    result = (a + b) / c;
    printf("%d\n", result);

    return 0;
}
1009:带余除法

【题目描述】
给定被除数和除数,求整数商及余数。此题中请使用默认的整除和取余运算,无需对结果进行任何特殊处理。

【输入】
一行,包含两个整数,依次为被除数和除数(除数非零),中间用一个空格隔开。

【输出】
一行,包含两个整数,依次为整数商和余数,中间用一个空格隔开。

【输入样例】
10 3
【输出样例】
3 1

#include <stdio.h>

int main() {
    int dividend, divisor, quotient, remainder;
    scanf("%d %d", &dividend, &divisor);
    quotient = dividend / divisor;
    remainder = dividend % divisor;
    printf("%d %d\n", quotient, remainder);

    return 0;
}
1010:计算分数的浮点数值

【题目描述】
两个整数a
和b
分别作为分子和分母,既分数ab
,求它的浮点数值(双精度浮点数,保留小数点后9
位)。

【输入】
输入仅一行,包括两个整数a
和b

【输出】
输出也仅一行,分数ab
 的浮点数值(双精度浮点数,保留小数点后9
位)。

【输入样例】
5 7
【输出样例】
0.714285714

#include <stdio.h>

int main() {
    int a, b;
    double result;
    scanf("%d %d", &a, &b);
    if (b == 0) {
        printf("Error: division by zero\n");
        return 1;
    }
    result = (double)a / b;
    printf("%.9lf\n", result);

    return 0;
}
第二节 常量和变量
2067:【例2.5】圆

【题目描述】
输入半径r,输出圆的直径、周长、面积,数与数之间以一个空格分开,每个数保留小数点后4位。

【输入】
输入半径。

【输出】
如题述。数与数之间以一个空格分开。

【输入样例】
1.0
【输出样例】
2.0000 6.2832 3.1416

#include <stdio.h>
#include <math.h>

int main() {
    double radius;
    scanf("%lf", &radius);

    double diameter = 2.0 * radius;
    double circumference = 2.0 * M_PI * radius;
    double area = M_PI * radius * radius;

    printf("%.4lf %.4lf %.4lf\n", diameter, circumference, area);

    return 0;
}
2068:【例2.6】鸡兔同笼

【题目描述】
数学中经典的“鸡兔同笼”问题,已知头共x个,脚共y只,问笼中的鸡和兔各有多少只?

【输入】
头和脚的数量。

【输出】
鸡和兔各自数量。一个空格隔开。

【输入样例】
30 90
【输出样例】
15 15

#include <stdio.h>

int main() {
    int x, y;
    scanf("%d %d", &x, &y);

    int t = (y - 2 * x) / 2;
    int j = x - t;

    printf("%d %d\n", j, t);

    return 0;
}
1011:甲流疫情死亡率

【题目描述】
甲流并不可怕,在中国,它的死亡率并不是很高。请根据截止2009年12月22日各省报告的甲流确诊数和死亡数,计算甲流在各省的死亡率。

【输入】
输入仅一行,有两个整数,第一个为确诊数,第二个为死亡数。

【输出】
输出仅一行,甲流死亡率,以百分数形式输出,精确到小数点后3位。

【输入样例】
10433 60
【输出样例】
0.575%

#include <stdio.h>

int main() {
    int confirmed, deaths;
    scanf("%d %d", &confirmed, &deaths);

    double mortalityRate = (double)deaths / confirmed * 100;

    printf("%.3lf%%\n", mortalityRate);

    return 0;
}
1012:计算多项式的值

【题目描述】
对于多项式f(x)=ax3+bx2+cx+d
和给定的a,b,c,d,x
,计算f(x)
的值,保留到小数点后7
位。

【输入】
输入仅一行,包含5
个实数,分别是x
,及参数a、b、c、d
的值,每个数都是绝对值不超过100
的双精度浮点数。数与数之间以一个空格分开。

【输出】
输出一个实数,即f(x)
的值,保留到小数点后7
位。

【输入样例】
2.31 1.2 2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可乐嘉宾Coc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值