目录
题目描述
某百货公司为了促销,采用购物打折的优惠方法,每位顾客一次购物:在 1000 元以上者,按 9.5 折优惠;在 2000 以上者,按 9 折优惠;在 3000 以上者,按 8.5 折优惠;在 5000 以上者, 按 8 折优惠;编写程序,购物款数,计算并输出优惠价。
输入样例
#: 850 1230 5000 3560
输出样例
#: discount=1,pay=850
discount=0.95,pay=1168.5
discount=0.8,pay=4000
discount=0.85,pay=3026
- #include
- #include
//万能头文件 - using namespace std;
- int main (){
- double a;
- scanf("%lf",&a);
-
- if (a < 1000) printf("discount = 1 , pay = %g\n" , a);
- if (a >= 1000 && a< 2000) printf("discount = 0.95,pay = %g\n" , a*0.95);
- if (a >= 2000 && a< 3000) printf("discount = 0.9,pay = %g\n" , a*0.9);
- if (a >= 3000 && a< 5000) printf("discount = 0.85,pay = %g\n" , a*0.85);
- if (a >= 5000 ) printf("discount = 0.8,pay = %g\n" , a*0.8);
- return 0;
- }
- 反序数:输入一个整数如 123,将其转换为反序之后的整数 321
- #include
- #include
//万能头文件 - int main() {
- int n;
- scanf("%d", &n);
- int ans = 0;//将反序之后的答案存在这里
-
- //将 n 逐位分解
- while (n > 0) {
- ans *= 10;
- ans += (n % 10);//得到个位
- n /= 10;//再缩小一位
- }
- printf("%d\n", ans);
- return 0;
- }
- 数位的拆解与合并,拆解很明显就是两 步,先取模然后除取整,合并就是先乘后加
- #include
- #include
//万能头文件 - int main() {
- int n,x;//输入数n(十进制)和要转换的x进制
- int s[105] ;
- scanf("%d%d",&n,&x) ;
- //数组下标
- int cnt = 0;
-
- //将n逐位分解
- while(n < 10){
- //获取数n的个位
- int w = (n % x);
- s[cnt++] = w;
- //数n减少一位
- n /= x;
- }
- //反序输出
- for(int i = cnt - 1;i>= 0;i--){
- printf("%d",s[i]);
- }
- printf("\n");
- return 0;
- }
- #include
- #include
//万能头文件 - int main() {
- int n,x;//输入数n(十进制)和要转换的x进制
- char s[105] ;//十进制以上有字符,用char
-
- scanf("%d%d",&n,&x) ;
- //数组下标
- int cnt = 0;
-
- //将n逐位分解
- while(n < 10){
- //获取数n的个位
- int w =(n % x) ;
- if(w<10) s[cnt++] = w + '0';//转换为字符+‘0’
- //如果大于10则从A字符开始
- else s[cnt++] = (w - 10) + 'A';//转换为小写则加‘a ’
- //数n减少一位
- n /= x;
- }
- //反序输出
- for(int i = cnt -1;i>=0;i++){
- printf("%c",s[i]);
- }
-
- printf("\n");
- return 0;
- }
- #include
- #include
- int main() {
- char s[105];
- //输入二进制字符串
- scanf("%s",&s);
- int len = strlen(s);
- int ans = 0;
- for (int i = 0;i
- if(s[i]=='0'){
- ans = ans *2;
- }
- else{
- ans = ans * 2 +1;
- }
- }
-
- printf("%d\n",ans);
- return 0;
- }
x 进制转 10 进制(通用版
- #include
- #include
- int main() {
- char s[105];
- int x;
- //输入x进制字符串和代表的进制x
- scanf("%s%d",&s,&x);
-
- int len = strlen(s);
- int ans = 0;
-
- for (int i = 0;i
- ans = ans * x;
- if(s[i]>='0' && s[i]<='9') ans += (s[i] - '0')
- else ans += (s[i] - 'A') + 10;
- }
-
- printf("%d\n",ans);
- return 0;
- }
x 进制转 y进制
- #include
- #include
- int main() {
- char s[105];
- int x,y;
- //输入二进制字符串和代表的进制x 以及要转换的进制y
-
- scanf("%s%d%d",&s,&x,&y);
-
- int len = strlen(s);
- int ans = 0;
-
- for (int i = 0;i
- ans = ans * x;
- if(s[i]>='0' && s[i]<='9') ans += (s[i] - '0');
- else ans += (s[i] - 'A') + 10;}
-
- char out[105];
- int cnt = 0;
-
- while(ans>0){
- int w = ans % y;
- if (w<10) out[cnt++] = w +'0';
- else out[cnt++] = (w - 10) + 'A';
- ans /= y ;
- }
- for (int i = cnt - 1;i>=0;i--){
- printf("%c",out[i]);
- }
- printf("\n");
- return 0;
- }
排版类问题
字符棱形
- 题目描述:
输入一个整数 n 表示棱形的对角半长度,请你用*把这个棱形画出来。
- 输入:
3
- 输出:
*
***
*****
***
*
- 解题分析:
对于这类题目,可以将它进行分解。从中间切开,上面一个三角形,下面一个 三角形。问题就转化为了如何输出三角形,利用两个 for 循环控制来输出三角形
解法一
- #include
- #include
- int main() {
- //n
- int n;
- scanf("%d", &n);
- //上三角
- for (int i = 1; i <= n; i++) {
- //先打印空白
- for (int j = 1; j <= n - i; j++) {
- printf(" ");
- }
- //再打印*
- for (int j = n - i + 1; j < n + i; j++) {
- printf("*");
- }
- printf("\n");
- }
- //下三角 下三角只需要将上三角反过来输出就行
- for (int i = n - 1; i >= 1; i--) {
- //先打印空白
- for (int j = 1; j <= n - i; j++) {
- printf(" ");
- }
- //再打印*
- for (int j = n - i + 1; j < n + i; j++) {
- printf("*");
- }
- printf("\n");
- }
- return 0;
- }
-
解法二
- #include
- 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);
- printf(" %c%c%c\n", c, c, c);
- printf(" %c", c);
- return 0;
- }
'运行
杨辉三角形
- 输入描述: 输入你想输出杨辉三角形的行数 n(n<=20);当输入 0 时程序结束.
- 输出描述: 对于每一个输入的数,输出其要求的三角形.每两个输出数中间有一个空格.每输完一个三角形换行.
- 输入样例: 5
- 输出样例:

- 只需要按照题意用二维数组去计算即可。
- 对于任意 一个数 a[i][j],都有 a[i][j] = a[i-1][j] + a[i-1][j-1]
- C语言中,EOF常被作为文件结束的标志。还有很多文件处理函数处错误后的返回值也是EOF,因此常被用来判断调用一个函数是否成功
- #include
- #include
- int main() {
- int a[21][12] = {0};
- int n;//行数
- while(scanf("%d",&n) != EOF){
- if(n==0) break;
- a[1][1] = 1;
- for (int i = 2;i<=n;i++){//从第二行开始迭代,第一行只有一个数1
- for (int j = 1;j < i;j++){#迭代列
- a[i][j] = a[i-1][j] + a[i-1][j-1];//计算每个元素
- }
- }
- //遍历行列进行打印
- for(int i = 1;i<=n;i++){
- for (int j = 1;j < i;j++){
- printf("%d",a[i][j]);
- }
- printf("\n");
- }
- return 0;
-
- }
- }
日期类问题
题目一
题目描述:
定义一个结构体变量(包括年、月、日),编程序,要求输入年月日,计算并输出该日在本年中第几天。
输入描述:
输入三个整数(并且三个整数是合理的,既比如当输入月份的时候应该在 1 至 12 之间,不应该超过这个范围),否则输出 Input error!
输出描述:
输出一个整数.既输入的日期是本月的第几天。
输入样例:
1985 1 20
2006 3 12
输出样例:
20
71
- #include<stdio.h>
- #include<string.h>
- struct node{
- int year,month,day ;
- }p;
-
- int f[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
-
- int main()
- {
- while(scanf("%d%d%d",&p.year,&p.month,&p.day) != EOF)
- {
-
- if((p.year%4==0) ||(p.year%400==0)&&(p.year%100!=0))
- {
- f[2] = 29;
- }
- else f[2] = 28 ;
-
- int flag = 0;
-
- //判断月份
- if (p.month<1 || p.month>12) flag = 1;
- //判断天数是否合法
- for(int i = 1;i<12;i++)
- {
- if(p.day < 0 || p.day > f[i])
- {
- flag = 1;
- }
- }
-
- if (flag)
- {
- printf("Input error!\n");
- continue;
- }
-
- int ans = p.day;
- for (int i = 1; i < p.month; i++)
- {
- ans += f[i];
- }
- printf("%d\n", ans);
- }
- return 0;
- }
题目二
- 题目描述
今天是2012年4月12日星期四,编写程序,输入今天开始到12月31日之间的任意日期,输出那一天是星期几。例如输入“5(回车)20(回车)”(5月20日),输出应为“Sunday”。
- 输入描述:
输入第一行为月份。
输入第二行为这个月的第几天。
- 输出描述:
输入这一天是星期几。
- 输入样例#:
5
20
- 输出样例#:
Sunday
- #include<stdio.h>
- #include<string.h>
- #include<stdio.h>
- #include<iostream>
- using namespace std;
- struct node{
- int year,month,day ;
- }p;
-
- int f[13] = {0,31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- string s[7] = {"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
-
- int main()
- {
- string end1;
- int ans = 0;
-
- cin>>p.month>>p.day;
- //如果是四月
- if(p.month==4)
- {
- ans = p.day - 12;
- }
- //如果是四月以后
- else if(p.month >=5 || p.month <=13)
- {
- for(int i = 5; i<p.month ;i++){
- ans += f[i];
- }
- ans = p.day + 15 + ans;
- }
- int res = (ans +3)%7;
- cout<<s[res]<<end1;
- return 0;
- }
-
-
相关阅读:
iCopy for Mac 剪切板 粘贴工具 历史记录 安装(保姆级教程,新手小白轻松上手)
python教程:11种字典常见操作
前端面试问题(4)
基于Stable Diffusion的AIGC服饰穿搭实践
16. Docker容器监控CAdvisor+InfluxDB+Granfana
salesforce是什么
VDA到Excel方案介绍之自定义邮件接收主题
【7】Docker中部署RabbitMQ
gb28181 网守网关分离+推理服务架构
【精选】构建智能木材计数系统:深度学习与OpenCV完美结合(详细教程+源码)
-
原文地址:https://blog.csdn.net/m0_51933492/article/details/127089605