【C语言】备战校赛Day3

举报
修修修也 发表于 2024/07/26 11:31:11 2024/07/26
【摘要】 ​日期:11.3 星期五L1-007 念数字题目描述输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:0: ling1: yi2: er3: san4: si5: wu6: liu7: qi8: ba9: jiu输入描述输入在一行中给出一个整数,如:1234。提示:整数包括负数、零和正数。输出描述在一行中输出这个整数对应的拼音,每个数字的拼音之间用空...

日期:11.3 星期五

L1-007 念数字

题目描述

输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

0: ling

1: yi

2: er

3: san

4: si

5: wu

6: liu

7: qi

8: ba

9: jiu

输入描述

输入在一行中给出一个整数,如:1234

提示:整数包括负数、零和正数。

输出描述

在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如:yi er san si

输入样例

-600

输出样例

fu liu ling ling

​编辑


解题代码

#include<stdio.h>




int main()

{

// 数字对应的字符串数组

char* num[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};




// 输入一个字符串

char n[100];

scanf("%s", n);




int i = 0;




// 判断是否为负数

if (n[0] == 45)

{

printf("fu ");

i++;

}




int j;

// 遍历字符串,将每个数字转换为对应的字符串并输出

while (n[i + 1] != '\0')

{

// 将字符转换为数字

j = n[i] - 48;

// 输出数字对应的字符串

printf("%s ", num[j]);

i++;

}




// 输出最后一个数字对应的字符串

j = n[i] - 48;

printf("%s", num[j]);




return 0;

}

本题的解题步骤为:

1. 创建字符指针数组,存放待输出的10个字符串

2. 接收输入数字,并遍历输出对应字符串

3. 单独输出最后一个字符,使其后方没有空格

细节详解见代码注释.


提交结果

​编辑


L1-008 求整数段和

题目描述

给定两个整数AB,输出从AB的所有整数以及这些数的和。

输入描述

输入在一行中给出2个整数AB,其中−100≤A≤B≤100,其间以空格分隔。

输出描述

首先顺序输出从AB的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X

输入样例

-3 8

输出样例

   -3   -2   -1    0    1
    2    3    4    5    6
    7    8
Sum = 30

​编辑


解题代码

#include <stdio.h>




int main()

{

// 初始化变量a和b

int a = 0;

int b = 0;




// 输入a和b的值

scanf("%d %d", &a, &b);




// 初始化变量sum和count

int sum = 0;

int count = 0;




// 从a循环到b,每次累加到sum,并输出数字

for (; a <= b; a++)

{

sum += a;

// 输出数字,使用%5d格式控制输出宽度为5

printf("%5d", a);

count++;




// 每输出5个数字换行

if (count % 5 == 0 && count != 0)

{

printf("\n");

}

}




// 如果数字总数不是5的倍数,再换行一次

if (count % 5 != 0)

{

printf("\n");

}




// 输出数字的和

printf("Sum = %d", sum);




return 0;

}

本题的解题步骤为:

1. 边遍历累加计算sum,边遍历输出a递增到b的数字

2. 注意输出格式!注意输出格式!注意输出格式!

细节详解见代码注释.


提交结果

​编辑


L1-009 N个数求和*

题目描述

本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数分子/分母的形式给出的,你输出的和也必须是有理数的形式。

输入描述

输入第一行给出一个正整数N≤100)。随后一行按格式a1/b1 a2/b2 ...给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。

输出描述

输出上述数字和的最简形式 —— 即将结果写成整数部分 分数部分,其中分数部分写成分子/分母,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。

输入样例

5
2/5 4/15 1/30 -2/60 8/3

输出样例

3 1/3


解题代码

#include <stdio.h>




// 计算最大公约数

long long gcd(long long a, long long b) {

return b == 0 ? a : gcd(b, a % b);

}




int main() {

int N;

scanf("%d", &N);




long long sum_numerator = 0; // 分子的和

long long sum_denominator = 1; // 分母的和




for (int i = 0; i < N; i++) {

long long numerator, denominator;

scanf("%lld/%lld", &numerator, &denominator);




// 计算最大公约数并约分

long long d = gcd(numerator, denominator);

numerator /= d;

denominator /= d;




// 计算公倍数并相加

sum_numerator = sum_numerator * denominator + numerator * sum_denominator;

sum_denominator *= denominator;




// 再次计算最大公约数并约分

d = gcd(sum_numerator, sum_denominator);

sum_numerator /= d;

sum_denominator /= d;

}




// 输出结果

if (sum_denominator == 1) {

printf("%lld\n", sum_numerator);

} else if (sum_numerator > sum_denominator) {

printf("%lld %lld/%lld\n", sum_numerator / sum_denominator, sum_numerator % sum_denominator, sum_denominator);

} else {

printf("%lld/%lld\n", sum_numerator, sum_denominator);

}




return 0;

}

本题的解题步骤为:

1. 需要一个函数来计算两个数的最大公约数.

2. 读取输入的有理数,并将它们转换为最简形式.

3. 将这些有理数相加,并将结果转换为最简形式.

细节详解见代码注释.


提交结果

​编辑


​编辑

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。