目录
21 角谷猜想
#include <iostream>
using namespace std;
int main() {
long long n;
cin>>n;
while (true) {
if (n==1) {
cout<<"End";
break;
}
if (n%2==1) {
cout<<n<<"*3+1="<<n*3+1;
n=n*3+1;
} else {
cout<<n<<"/2="<<n/2;
n/=2;
}
cout<<endl;
}
return 0;
}
根据提示,计算过程中中间值会超过int的范围,所以n采用long long类型,如果用int的话会WA(Wrong Answer)
22 津津的储蓄计划
#include <iostream>
using namespace std;
int main() {
int money=0;
int nowHave=0;
for (int i=1;i<=12;++i) {
int get;
cin>>get;
nowHave+=300;
if (nowHave<get) {
cout<<-i;
return 0;
}
nowHave-=get;
money+=nowHave/100*100;
nowHave=nowHave-nowHave/100*100;
}
double result=nowHave+money*1.2;
cout<<result;
return 0;
}
遍历12次,表示12个月,再对钱不够用的情况、剩余钱、存钱等操作的执行
23 药房管理
#include <iostream>
using namespace std;
int main() {
int m,n,no=0;
cin>>m>>n;
for (int i=1;i<=n;++i) {
int get;
cin>>get;
if (m-get<0) {
no++;
} else {
m-=get;
}
}
cout<<no;
return 0;
}
采用循环,只要药不足就+1,最后输出结果即可
24 正常血压
#include <iostream>
using namespace std;
int main() {
int n;
cin>>n;
int normal=0,maxNormal=0;
for (int i=1;i<=n;++i) {
int a,b;
cin>>a>>b;
if (a>=90&&a<=140&&b>=60&&b<=90) {
normal++;
if (normal>maxNormal) {
maxNormal=normal;
}
} else {
normal=0;
}
}
cout<<maxNormal;
return 0;
}
不断获取cin输入,然后进行判断就好了
25 求特殊自然数
#include <iostream>
using namespace std;
int main() {
for (int i=100;i<=999;++i) {
int a=i/100;
int b=i%100/10;
int c=i%100%10;
if (a>=7||b>=7||c>=7) continue;
if (a*7*7+b*7+c==c*9*9+b*9+a) {
cout<<a*7*7+b*7+c<<endl;
cout<<a<<b<<c<<endl;
cout<<c<<b<<a;
return 0;
}
}
return 0;
}
因为7进制和9进制都是3位数,所以遍历100到999之间的数字,由于7进制数位中不可能出现≥7的数,9进制中不可能出现9,所以只要数字里包含7 8 9就跳过,剩下的计算出对应的十进制数,进行比较就好了!
26 统计满足条件的4位数个数
#include <iostream>
using namespace std;
int main() {
int n,result=0;
cin>>n;
for (int i=1;i<=n;++i) {
int get;
cin>>get;
int a=get/1000;
int b=get%1000/100;
int c=get%1000%100/10;
int d=get%1000%100%10;
if (d-a-b-c>0) {
result++;
}
}
cout<<result;
return 0;
}
通过取余和整除的操作获得数位,然后进行计算和判断就ok了
27 级数求和
#include <iostream>
using namespace std;
int main() {
int k,n=1;
cin>>k;
double result=0.0;
while (true) {
result+=1.0/n;
if (result>k) break;
n++;
}
cout<<n;
return 0;
}
注意这道题进行除法时要用1.0去除,这样才能得出浮点数
28 分离整数的各个数位
#include <iostream>
using namespace std;
int main() {
int n;
cin>>n;
while (true) {
cout<<n%10<<" ";
n/=10;
if (n==0) break;
}
return 0;
}
原数%10得出最低位数字,原数/10去除最低位
29 数字反转
#include <iostream>
using namespace std;
int main() {
int n;
cin>>n;
if (n<0) {
cout<<"-";
n=-n;
}
bool first=true;
while (true) {
int w=n%10;
n/=10;
if (w==0&&first==false) {
cout<<w;
}
else if (w!=0) {
cout<<w;
first=false;
}
if (n==0) {
break;
}
}
return 0;
}
有负号先输出负号,得出绝对值后再进行数位分解的操作
30 含k个3的数
#include <iostream>
using namespace std;
int main() {
int m,k,c=0;
cin>>m>>k;
if (m%19==0) {
while (true) {
int w=m%10;
if (w==3) {
c++;
}
m/=10;
if (m==0) {
break;
}
}
if (k==c) {
cout<<"YES";
} else {
cout<<"NO";
}
} else {
cout<<"NO";
}
return 0;
}
仍然用到了分离数位的操作