当前位置: 首页 > news >正文

PTA刷题笔记(纠细节 有详解)

·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;}//最大公因数是bprintf("%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;
}

解题思路

1. 首先处理负号,如果数字是负数,先输出"fu"。
2. 将数字转换为字符串,方便逐位处理。
3. 创建一个数字到拼音的映射表。
4. 遍历数字字符串的每一位,查找对应的拼音并输出。
5. 注意控制空格,确保最后一个拼音后面没有空格。

·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;
}

代码说明
1. 使用`scanf("%c", &c)`逐个字符读取输入
2. 使用`length`变量记录当前单词的长度
3. 使用`first_word`标记控制输出格式,确保第一个单词前没有空格
4. 遇到句点时,先处理可能存在的最后一个单词,然后结束循环
5. 遇到空格时,如果正在统计单词,则输出当前单词长度
6. 最后输出换行符

http://www.dtcms.com/a/212649.html

相关文章:

  • 【OCCT+ImGUI系列】010-BRepMesh-网格化IncrementalMesh
  • 【Android】非System用户下Persist应用不自动拉起
  • 2025年渗透测试面试题总结-匿名[实习]安全工程师(安全厂商)(题目+回答)
  • 【Android】System分区应用自带库与原生库同名问题分析
  • Java集合框架基础知识点全面解析
  • Go 语言基础1 Slice,map,string
  • 计算机视觉(图像算法工程师)学习路线
  • where is the examples of stm32h743i demo project inside of stm32cubeh7
  • 电商小程序店铺详情页:头部无限分类与筛选功能实现
  • 书生五期--端侧小模型论文分类微调打榜
  • 搭建 C/C++_CMake_Boost_git 开发环境
  • 计算机视觉中的可重复性:深入案例分析与Python代码实现
  • 【MySQL】08.视图
  • TiDB:从快速上手到核心原理与最佳实践
  • 【时时三省】(C语言基础)函数的嵌套调用
  • python学习day28
  • Linux 系统常用核心库----用户态程序运行的基石
  • 广东省省考备考(第二十天5.25)—言语:逻辑填空(听课后强化训练)
  • 前端常见的安全问题
  • java高级 -Junit单元测试
  • 用VMWare架飞牛nas 启用Intel千兆网卡
  • 基于点标注的弱监督目标检测方法研究
  • Linux Kernel调试:强大的printk(一)
  • 程序代码模块化设计的架构方法论
  • 《仿盒马》app开发技术分享-- 定位获取(端云一体)
  • LangChain02-Agent与Memory模块
  • React整合【ECharts】教程003:关系图的构建和基本设置
  • 在langchain4j中 UserMessage注解和SystemMessage两个注解的区别
  • MyBatis-Plus整合SpringBoot及使用
  • 将 Shp 导入 PostGIS 空间数据的五种方式(全)