日期:11.3 星期五
L1-007 念数字
题目描述
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:
cpp0: 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
解题代码
cpp
#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;
}
本题的解题步骤为:
- 创建字符指针数组,存放待输出的10个字符串
- 接收输入数字,并遍历输出对应字符串
- 单独输出最后一个字符,使其后方没有空格
细节详解见代码注释.
提交结果
L1-008 求整数段和
题目描述
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输入描述
输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔。
输出描述
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。
输入样例
-3 8
输出样例
-3 -2 -1 0 1
2 3 4 5 6
7 8
Sum = 30
解题代码
cpp
#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;
}
本题的解题步骤为:
- 边遍历累加计算sum,边遍历输出a递增到b的数字
- 注意输出格式!注意输出格式!注意输出格式!
细节详解见代码注释.
提交结果
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
解题代码
cpp
#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;
}
本题的解题步骤为:
- 需要一个函数来计算两个数的最大公约数.
- 读取输入的有理数,并将它们转换为最简形式.
- 将这些有理数相加,并将结果转换为最简形式.
细节详解见代码注释.