·7-19 支票面额

代码如下:
#include <stdio.h>
int main ()
{
int n;
scanf("%d", &n);
int y, f;
int flag = 0;
for(y = 0; y < 100; y ++)//y一定小于100,因为如果大于100的话出纳员不会拿大于100的分
{
for(f = 0; f < 100; f ++)//分一定小于100
{
if( n + 199 * y == 98 * f )//f * 100 + y = n + 2 * y * 100 + 2 * f
{
flag = 1;
break;
}
}
if(flag == 1)
break;//上面的break只能跳出上一个循环
}
if(y >= 100)//说明不合理,舍弃
{
printf("No Solution");
}
else
{
printf("%d.%d",y,f);
}
return 0;
}
·7-20 打印九九口诀表


代码如下:
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
for(int i = 1; i <= n; i ++)//i从1到n,控制乘法表的行数,每i行打印i个式子
{
for(int j = 1; j <= i; j ++)//列数
{
printf("%d*%d=%-4d", j, i, i * j);//%-4d表示左对齐占四个字符宽度
}
printf("\n");
}
return 0;
}
·7-21 求特殊方程的正整数解

代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int n = 0;
scanf("%d", &n);
int x, y = 0;
int found = 0;//标记是否找到解
int max = (int)sqrt(n);//确定循环的最大值
for(x = 1; x <= max; x ++)
{
for(y = x; y <= max; y ++)//y从x开始,确保x <= y
{
if(x * x + y * y == n)
{
printf("%d %d\n", x, y);
found = 1;//标记已找到解
}
}
}
if(!found)
{
printf("No Solution\n");
}
return 0;
}
·7-24 约分最简分式

代码如下:
#include<stdio.h>
int main()
{
int n, m = 0;
scanf("%d/%d", &n, &m);
int tmp = 0;
int a = n;
int b = m;
while(tmp = a % b)//辗转相除法求最大公因数
{
a = b;
b = tmp;
}//最大公因数是b
printf("%d/%d", n / b, m / b);
return 0;
}
·7-25 念数字


错误代码:
#include<stdio.h>
#include<string.h>
int main()
{
char num[20];
scanf("%s", num);
int start = 0;
int len = strlen(num);
int flag = 0;
const char *arr[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
if(num[0] == '-')
{
printf("fu ");
start = 1;
}
for(int i = start; i < len; i ++)
{
flag = num[i] - '0';
printf("%s ", arr[flag]);
}
return 0;
}

错误原因:没有看到题目要求"行末没有空格"导致格式错误
正确代码:
#include<stdio.h>
#include<string.h>
int main()
{
char num[10];//存储输入的数字字符串
scanf("%s", num);
int start = 0;
int len = strlen(num);
int flag = 0;
//数字到拼音的映射,用指针数组存储字符串(相比于二维字符数组更常用)
const char *arr[10] = {"ling", "yi", "er", "san", "si", "wu", "liu", "qi", "ba", "jiu"};
//处理负号
if(num[0] == '-')
{
printf("fu");
start = 1;
if(len > 1)
{
printf(" ");//表示符号后面跟着的空格,只有后面还有数字才加空格
}
}
for(int i = start; i < len; i ++)
{
flag = num[i] - '0';//将字符转化为数字
printf("%s", arr[flag]);
if(i != len - 1)
printf(" ");//表示数字之间的空格
}
return 0;
}
解题思路
-
首先处理负号,如果数字是负数,先输出"fu"。
-
将数字转换为字符串,方便逐位处理。
-
创建一个数字到拼音的映射表。
-
遍历数字字符串的每一位,查找对应的拼音并输出。
-
注意控制空格,确保最后一个拼音后面没有空格。
·7-26 单词长度

代码如下:
#include <stdio.h>
int main() {
char c;
int length = 0;
int first_word = 1; // 标记是否是第一个单词,用于控制空格输出
while (1) {
scanf("%c", &c);
// 遇到句点结束输入
if (c == '.') {
// 处理句点前的单词(如果有)
if (length > 0) {
if (first_word) {
printf("%d", length);
first_word = 0;
} else {
printf(" %d", length);
}
}
break;
}
// 遇到空格
if (c == ' ') {
// 如果正在统计单词,输出长度
if (length > 0) {
if (first_word) {
printf("%d", length);
first_word = 0;
} else {
printf(" %d", length);
}
length = 0;
}
// 跳过连续空格
continue;
}
// 普通字符,增加单词长度
length++;
}
printf("\n");
return 0;
}
代码说明
-
使用`scanf("%c", &c)`逐个字符读取输入
-
使用`length`变量记录当前单词的长度
-
使用`first_word`标记控制输出格式,确保第一个单词前没有空格
-
遇到句点时,先处理可能存在的最后一个单词,然后结束循环
-
遇到空格时,如果正在统计单词,则输出当前单词长度
-
最后输出换行符