2020-10-20 整理:

第一题:

2011年开始实行新个人所得税法,要求输入月薪salary,输出应交的个人所得税 tax (保留两位小数)。

新税法方案如下:

tax=rate*(salary-3500) - deduction

当 salary<=3500时,rate=0、deduction=0;

当 3500<salary<=5000时,rate=3%、deduction=0;

当 5000<salary<=8000时,rate=10%、deduction=105;

当 8000<salary<=12500时,rate=20% 、deduction=555;

当 12500<salary<=38500时, rate=25% 、deduction=1005;

当 38500<salary<=58500时, rate=30% 、deduction=2755;

当 58500<salary<=83500时, rate=35% 、deduction=5505;

当 83500<salary时, rate=45% 、deduction=13505;

【输入输出样例1】(下划线部分表示输入)

Enter the salary: 5010.87

tax=46.09

【输入输出样例2】(下划线部分表示输入)

Enter the salary: 32098.76

tax=6144.09

【输入输出样例3】(下划线部分表示输入)

Enter the salary: 3000

tax=0.00

【输入输出样例4】(下划线部分表示输入)Enter the salary: 59000

tax=13920.00

【输入输出样例5】(下划线部分表示输入)Enter the salary: 84500

tax=22945.00

【样例说明】

输入提示符后要加一个空格。例如“ Enter the salary : ”,其中“:”后要加一个且只能一个空格。

输出语句的“=”两边无空格。

英文字母区分大小写。必须严格按样例输入输出。

#include <stdio.h>

void getTax(double salary,double rate,int deductio);
int main() {
// double salary;
// scanf("%lf",&salary);
// printf("%lf",(double )(salary-30)); double salary;
double tax,rate;
int deduction;
printf("Enter the salary: ");
scanf("%lf",&salary);
if (salary<=3500){
getTax(salary=3500,0,0);
} else if (salary<=5000) {
getTax(salary, 0.03, 0);
}else if (salary<=8000) {
getTax(salary, 0.1, 105);
}else if (salary<=12500) {
getTax(salary, 0.2, 555);
}else if (salary<=38500) {
getTax(salary, 0.25, 1005);
}else if (salary<=58500) {
getTax(salary, 0.3, 2755);
}else if (salary<=83500) {
getTax(salary, 0.35, 5505);
}else{
getTax(salary, 0.45, 13505);
} return 0;
} void getTax(double salary,double rate,int deduction){
double tax;
tax =(rate*(salary-3500)-deduction);
printf("tax=%.2lf",tax); }

解释

上面代码段使用的基础的if-else if-else结构,但是使用的时候注意if else if eles各使用范围,不要出现多余代码,影响系统运行速度。

第二题:(同构数)

【问题描述】

同构数是其平方数的尾数等于该数自身的自然数,例如:25×25=625。从键盘输入一个不大于10000的自然数,判断其是否是同构数并按样例格式输出。

【输入形式】

从键盘输入一个不大于10000的自然数。

【输出形式】

输出格式按样例。

【样例输入1】

25

【样例输出1】

25 yes,25*25=625

【样例输入2】

11

【样例输出2】

11 no,11*11=121

#include <stdio.h>
#include<math.h>
int main() {
int x,y,z;
scanf("%d",&x);
int i =0;
z = x;
//获取幂
while (x !=0){
x = x/10;
i++;
}
//pow a几次幂
y = pow(10,i);
//乘积取后i位的数
if(z == z*z%y){
printf("%d Yes,%d*%d=%d",z,z,z,z*z);
} else{
printf("%d No,%d*%d=%d",z,z,z,z*z); }
return 0; }

解释:

首先我们需要要知道怎么获得后几位数字,使用%10^n获取乘积的后几位;

In [2]: 625%100
Out[2]: 25 In [3]: 6987%1000
Out[3]: 987

但是我们怎么知道应该除以n的多少呢;

我们可以循环整除,使得x=0(x我们输入的数字),若x !=0---->i++即:

int i =0;
while (x !=0){
x = x/10;
i++;
}

这样我们就获得了n值。

后面只需要把原参数与乘积取余后i位的数做对比即可。

第三题:(加一天后日期)

问题描述】输入一个日期,显示这个日期加一天后的日期。注意要考虑这个日期是年尾或各个月的月尾的情况。

【输入形式】输入一个日期,年月日形式表示,空格分开。

【输出形式】 输出一个日期,年月日形式表示,空格分开。

【样例输入】2000 12 31

【样例输出】2001 1 1

#include <stdio.h>

int main() {
int year,month,days;
scanf("%d %d %d",&year,&month,&days);
// printf("%d %d %d",year,month,days); switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if(month ==12 && days==31){
printf("%d %d %d",year+1,1,1);
} else{
if(days ==31){
printf("%d %d %d",year,month+1,1);
} else{
printf("%d %d %d",year,month,days+1);
}
}
break;
case 4:
case 6:
case 9:
if(days ==30){
printf("%d %d %d",year,month+1,1);
} else{
printf("%d %d %d",year,month,days+1);
}
break;
case 2:
if(year%400 ==0 || year%4==0 && year%100 !=0){
if(days==29){
printf("%d %d %d",year,month+1,1);
} else{
printf("%d %d %d",year,month,days+1);
}
} else{
if(days==28){
printf("%d %d %d",year,month+1,1);
} else{
printf("%d %d %d",year,month,days+1);
}
}
}
return 0;
}

解释:

首先需要明确每个月份包含的天数,即:

1 3 5 7 8 10 12包含31天,且31需要特殊处理,即31+1--->1;其中如果月份等于12,需要特殊处理,即years+1,1,1;

4 6 9包含30天,且30需要特殊处理,即30+1--->1;

2月需要判断是否为闰年:如果是闰年则包含29天,且29需要特殊处理,即29+1--->1;

如果不是则包含28天,且28需要特殊处理,即28+1--->1;

如果其他条件则,years、month、dayas+1;

分析完成,后面使用if-else即可。

第四题:(零钱换整钱)

问题描述】

某人拿了一堆硬币去银行换钱,已知1角的硬币厚1.8mm,5角的硬币厚1.5mm,1元的硬币厚2.0mm。他将1角的硬币放成一叠,将5角的硬币放成一叠,将1元的硬币放成一叠,发现3叠硬币一样高。银行正好把这些硬币换成若干张面值为10元的纸币,问此人至少带了多少钱的硬币(元为单位),每种面值的硬币各有多少枚。输出格式为:1角的枚数,5角的枚数,1元的枚数,总金额元数(样如:50,30,40,60)。

【输入形式】

无输入。

【输出形式】

输出如下用逗号分隔的4个数(样如:50,30,40,60):

1角的枚数,5角的枚数,1元的枚数,总金额元数

#include <stdio.h>
int main(){
// int x,y,z;
// 1.8*x=1.5*y=2.0*z; for (int x = 1; x <=100; x++) {
for (int y = 1; y <= 100; y++) {
for (int z = 1; z <= 100; z++) {
int result = 0.1*x+0.5*y+z;
if(result%10==0&&1.8*x==1.5*y&&1.5*y==2.0*z){
printf("%d,%d,%d,%d",x,y,z,result);
} }
}
}
return 0;
}

解释:

首先此题属于穷举范围,个人只写出一个版本,网站各版本都有,自行学习;

由题意可以得出一个等式:1.8x=1.5y=2.0*z,假设1角的数量 x, 依次 y , z;

并且result = 0.1x+0.5y+z,result的结果取余应该等于0;

假设每个硬币的数量上限为100,若没有数据或者多组数据,则相应的范围增加或减少,结果只能唯一;

满足上述条件即可。

运行成功:

50,60,45,80

总结:

上述题目的解不是唯一,例题中的解是我所理解并运行成功的,如果有不对的地方,欢迎指出。

C语言程序设计之 循环控制2020-10-20的更多相关文章

  1. C语言程序设计100例之(20):过河卒

    例20  过河卒 题目描述 如图1,在棋盘的A点有一个过河卒,需要走到目标B点.卒行走规则:可以向下.或者向右.同时在棋盘上的任一点有一个对方的马(如图1的C点),该马所在的点和所有跳跃一步可达的点称 ...

  2. 2020.10.20 利用POST请求模拟登录知乎

    前两天学习了Python的requests模块的相关内容,对于用GET和PSOT请求访问网页以抓取需要的内容有了初步的了解,想要再从一些复杂的网站积累些经验.最开始我采用最简单的get(url)方法想 ...

  3. 牛客 2020.10.20 TG 前两题

    T1 GCD 数学水题... 对于每个数,如果这个数有两个及以上的质因数的话,它所有除 \(1\) 之外的因数求 \(GCD\) 的值一定为 \(1\).那么判断是否是质数或质数的次方即可(质数除 \ ...

  4. 《手把手教你学C语言》学习笔记(10)--- 程序的循环控制

    C语言程序设计中,有些代码需要重复执行很多次,循环主要有三类: 一.for循环 1.基本格式为:for(表达式1:表达式2:表达式3){ //表达式1:循环变量赋初值 //表达式2:循环变量满足的条件 ...

  5. 全国计算机等级考试二级教程-C语言程序设计_第10章_字符串

    字符型指针数组 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> //参数中,int a ...

  6. C语言程序设计50例(经典收藏)

    本篇文章是对C语言程序设计的50个小案例进行了详细的分析介绍,需要的朋友参考下 [程序1]题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位.十 ...

  7. 【学习笔记】PYTHON语言程序设计(北理工 嵩天)

    1 Python基本语法元素 1.1 程序设计基本方法 计算机发展历史上最重要的预测法则     摩尔定律:单位面积集成电路上可容纳晶体管数量约2年翻倍 cpu/gpu.内存.硬盘.电子产品价格等都遵 ...

  8. C语言程序设计第4堂作业

    大家注意:本次作业稍有增加,由于放假期间大家空闲时间比较充足,将之前学习过程中遗留的问题必须在假期解决.   本次课学习主要内容: 分支结构中的二分支结构.多分支结构和else-if语句 掌握字符型数 ...

  9. 160809209_李梦鑫_C语言程序设计实验2+选择结构程序设计_进阶

    <C语言程序设计>实验报告 学 号 160809209 姓 名 李梦鑫 专业.班 计科16-2班 学    期 2016-2017 第1学期 指导教师 黄俊莲 吴喆 实验地点 C05 机 ...

  10. 中国大学MOOC-翁恺-C语言程序设计习题集-解答汇总

    中国大学MOOC-翁恺-C语言程序设计习题集 PAT 习题集 02-0. 整数四则运算(10) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standar ...

随机推荐

  1. Nginx reload重新加载配置文件的异常情况

    Nginx reload重新加载配置文件的异常情况 背景 临近年底, 很多业务工作量都上来了. 今天同事告知, nginx的log 里面出现了大量的 too many openfiles 的提示信息. ...

  2. Harbor修改默认网段以及设置开机启动的方法

    Harbor修改默认网段以及设置开机启动的方法 背景 docker 默认的网段是 172.16.xx.xx 网段. harbor进行设置时会自动加1 设置为 172.17.xx.xx 有时候这个网段是 ...

  3. [转帖]Elasticsearch-sql 用SQL查询Elasticsearch

    https://www.cnblogs.com/kangoroo/p/7273493.html https://www.cnblogs.com/kangoroo/p/7273493.html Elas ...

  4. Notepad++ 显示空格

    公司里面用yaml 文件经常会出现一些奇怪的问题... 今天又遇到了//全角空格 显示的长度一样 但是实际上 yaml文件解析的不对..notepad++ ---> 视图--->显示符号- ...

  5. STM32CubeMX教程25 PWR 电源管理 - 睡眠、停止和待机模式

    1.准备材料 开发板(正点原子stm32f407探索者开发板V2.4) STM32CubeMX软件(Version 6.10.0) 野火DAP仿真器 keil µVision5 IDE(MDK-Arm ...

  6. css3文字阴影和盒子阴影

    文字阴影 文字阴影的语法格式: text-shadow:水平向右的偏移值 向下的偏移值 迷糊度 阴影的颜色,水平向右的偏移值 向下的偏移值 迷糊度 阴影的颜色; 可以有多个阴影,但是在实际的项目中最多 ...

  7. vue3获取数据的注意点

    场景描述 在使用vue3的时候.我们很多人喜欢一个页面分成几个几个部分来写 这样做的目的是为了区分. 做的彼此的逻辑互相独立,互不干扰 但是有的时候,我们可能会去获取不属于自己区域的函数 这个时候我们 ...

  8. 学到了,原来 gzip 是种`连续分块`的压缩算法

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu Github 公众号:一本正经的瞎扯 我想要表述的是:假设有 10 mb的数据使用 gzip 算 ...

  9. Linux命令行从x度网盘下载数据

    技术背景 做开源项目的时候,尤其是现在的数据量越来越大,经常会面临到数据往哪里存放的问题.因为自己刚好有一个某度云的会员,看了一下还有几十个TB的空间还没用上.于是考虑把这个网盘变成一个定向共享数据的 ...

  10. 【JS 逆向百例】X球投资者社区 cookie 参数 acw_sc__v2 加密分析

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 声明 本文章中所有内容仅供学习交流,抓包内容.敏感网址.数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后 ...