文章目录
- 7.1 厘米换算英尺英寸
- 7.2 然后是几点
- 7.3 逆序的三位数
- 7-4 BCD解密
- 7.5 表格输出
- 7.6 混合类型数据格式化输入
- 7.7 12-24小时制
- 7-8 超速判断
- 7.9 用天平找小球
- 7.10 计算工资
- 7.11 分段计算居民水费
- 7.12 两个数的简单计算器
- 7.13 日K蜡烛图
- 7.14 求整数段和
- 7.15 计算圆周率
- 7-16 求符合给定条件的整数集
- 7.17 爬动的蠕虫
- 7.18 二分法求多项式单根
- 7.19 支票面额
- 7.20 打印九九口诀表
- 7.21 求特殊方程的正整数解
- 7.22 龟兔赛跑
- 7.23 币值转换
- 7.24 约分最简分式
- 7.25 念数字
- 7.26 单词长度
- 7.27 冒泡法排序
- 7.28 猴子选大王
- 7.29 删除字符串中的子串
- 7.30 字符串的冒泡排序
- 7.31 字符串循环左移
- 7.32 说反话-加强版
- 7.33 有理数加法
- 7.34 通讯录的录入与显示
- 7.35 有理数均值
- 7.36 四则运算
- 7.37 整数分解为若干项之和
- 7.38 数列求和-加强版
7.1 厘米换算英尺英寸
如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。
输入格式:
输入在一行中给出1个正整数,单位是厘米。
输出格式:
在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。
输入样例:170
输出样例:
5 6
题目不难,唯一算是难点的地方在于:解答者容易陷入题目所给公式的误区里,总想着把公式倒过来便能解决。
正确的解题思路是:
让输入的厘米除以30.48,便是带小数的英尺,直接取整便是所得英尺。
将小数部分乘以12并取整,便为英寸
(foot+inch/12)×0.3048 单位米
(foot+inch/12)×0.3048x100 单位㎝
#include <stdio.h>
int main()
{
/*1英尺等于12英寸
(foot+inch/12)×0.3048 == 英尺 * 0.3048 == meter
即 英尺 == meter /0.3048;
而英尺又由两部分组成(foot+inch/12) 整数部分的foot 以及小数部分的 (inch/12)
所以 meter /0.3048 取整即为 foot
meter /0.3048 - foot 即为小数部分 inch/12 即小数部分为 12 *(meter /0.3048 - foot);
*/
int cm=0;
scanf("%d",&cm); //输入的cm
int foot = cm/100.0/0.3048; /* 1英尺等于30.48厘米 */
int inch = (cm/100.0/0.3048 - foot) * 12;
printf("%d %d",foot,inch);
return 0;
}
7.2 然后是几点
有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数
输入格式:
输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。
输出格式:
输出四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例:
1310
#include<iostream>
using namespace std;
int main()
{
int time,passtime;//注意passtime可能为负数
cin>>time>>passtime;
int hour,minute;
hour=time/100; //获取小时数 ,hour为最前两位
minute=time%100 ;//获取分钟数,分钟数为最后两位
minute+=passtime;// minuet与add之和表示为:要增加多少分钟,或者是要减去多少分钟(add为负时)
while(minute<0) 如果此时minute为负,则说明hour要-1,minute要+60,直到 minute>0,注意要有加有减
{
hour--;
minute+=60;
}
while(minute)
{
if(minute>=60)//如果此时minute>=60,则说明hour要+1,minute要-60,直到 0<=minute<60
{
hour++;
minute-=60;
}
else
break;
}
cout<<hour; //hour可直接输出
//因为输出规定为4位,minute要分类讨论
if(minute==0) //当minute==0时,补2个0
{
cout<<"00"<<endl;
}
else if(minute<=9)
{
cout<<minute<<"0";
}
else
cout<<minute;
}
7.3 逆序的三位数
程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。
输入格式:
每个测试是一个3位的正整数.
输出格式:
输出按位逆序的数。
输入样例:
123
输出样例:
321
#include<iostream>
using namespace std;
int main()
{
int n;
cin>>n;
int a,b,c;
a=n/100;
b=n/10%10;
c=n%100%10;
cout<<100*c+10*b+a;
}
7-4 BCD解密
BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是十进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!
现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。
输入格式:
输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。
输出格式:
输出对应的十进制数。
输入样例:
18
输出样例:
12
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int a=n/16; //高位
int b=n%16; //低位
if(a==0&&b==0)cout<<0;
else
cout<<a<<b;
}
7.5 表格输出
没有一点技术含量,就是格式控制
#include<iostream>
int main() {
std::cout << "------------------------------------\n";
std::cout << "Province Area(km2) Pop.(10K)\n";
std::cout << "------------------------------------\n";
std::cout << "Anhui 139600.00 6461.00\n";
std::cout << "Beijing 16410.54 1180.70\n";
std::cout << "Chongqing 82400.00 3144.23\n";
std::cout << "Shanghai 6340.50 1360.26\n";
std::cout << "Zhejiang 101800.00 4894.00\n";
std::cout << "------------------------------------\n";
return 0;
}
7.6 混合类型数据格式化输入
直接输入输出就行,注意格式控制
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
float a;
int b;
char c;
float d;
cin>>a>>b>>c>>d;
cout<<c<<" "<<b<<" ";
cout<<setiosflags(ios::fixed)<<setprecision(2)<<a<<" ";
cout<<setiosflags(ios::fixed)<<setprecision(2)<<d;
//c语言控制小数输出位数为printf("%c %d %.2f %.2f",c,b,a,d);
return 0;
}
7.7 12-24小时制
注意刚好12点的情况,还有就是处理好输入的 :
调试输入测试样例的时候记得切换为英文模式,不然会出现蜜汁错误
//------------------------C++版-------------------------
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int hour,minute;
char colon;
cin>>hour>>colon>>minute;
if(hour<12)//如果是上午,则不用转化时间,直接按格式输出即可
{
cout<< hour <<":"<< minute<<" AM"<<endl;//注意后面有一个空格
}
else if(hour==12)//刚好是12点,注意这种情况
{
cout<< hour <<":"<< minute<<" PM"<<endl;
}
else//下午
{
cout<<hour-12<< ":"<< minute<<" PM"<<endl;
}
}
//--------------------------C语言版-------------------
//直接在scanf的格式字符串中加入:,让scanf来处理这个冒号
#include<stdio.h>
int main() {
int hour, minute;
scanf("%d:%d", &hour, &minute);
if (hour<12) // 上午
{
printf("%d:%d AM", hour, minute);
}
else if(hour > 12) {
// 下午
hour = hour - 12;
printf("%d:%d PM", hour, minute);
}
else {
// 中午12点
printf("%d:%d PM", hour, minute);
}
return 0;
}
7-8 超速判断
直接判断,注意输出要求就可以了。
#include<iostream>
using namespace std;
int main()
{
int speed;
cin>>speed;
if(speed<=60)
{
cout<<"Speed: "<<speed<<" - OK"<<endl;
}
else
cout<<"Speed: "<<speed<<" - Speeding"<<endl;
}
7.9 用天平找小球
直接比较就可以,比两次就可以了,注意最后输出的不是重量,而是小球的标号
#include<iostream>
using namespace std;
int main()
{
int A,B,C; //3个小球的质量
cin>>A>>B>>C;
if(A==B)
{
cout<<"C"<<endl;
}
else if(B==C)
{
cout<<"A"<<endl;
}
else
cout<<"B"<<endl;
return 0;
}
7.10 计算工资
注意条件判断和输出控制即可
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int year,worktime;
cin>>year>>worktime;
double pay=0;
int IsNew; //判断是否为老员工
if(year<5)
IsNew=1;
else IsNew=0;
if(worktime<=40)
{
if(IsNew==1)
{
pay=worktime*30;
}
else
pay=worktime*50;
}
else
{
if(IsNew==1)
{
pay=40*30+(worktime-40)*45;
}
else
pay=40*50+(worktime-40)*75;
}
cout<<fixed<<setprecision(2)<<pay<<endl;
return 0;
}
7.11 分段计算居民水费
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double x;
cin>>x;
double pay;
if(x<15)
pay=4*x/3;
else
pay=2.5*x-17.5;
cout<<fixed<<setprecision(2)<<pay<<endl;
return 0;
}
7.12 两个数的简单计算器
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int op1,op2;
char sign;
cin>>op1>>sign>>op2;
if(sign=='+')
cout<<op1+<