Openjudge 1.5 循环控制
1.5.4
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main(){
int n;
int hih[10001];
int sum;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&hih[i]);
sum+=hih[i];
}
float avera;
avera=float(sum)/float(n);
printf("%d %.5f",sum,avera);
return 0;}
1.5.6
#include <bits/stdc++.h>using namespace std;int main(){
int count;
cin>>count;
int num;
int min=1000;
int max=0;
for(int i=0;i<count;i++)
{
cin>>num;
if(max<num)
max=num;
if(min>num)
min=num;
}
cout<<max-min;
return 0;}
1.5.9
对于奇偶,偶偶,奇奇开头的所有情况要全部包含
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main(){
int m,n;
scanf("%d%d",&m,&n);
int k,l;
k=0;
//cout<<m<<"/"<<n<<"/"<<k<<"/"<<sum<<"/"<<endl;
for(int i=m;i<=n;i++){
if(i%2!=0){
k+=i;
}
// cout<<i<<"/"<<m<<"/"<<sum<<endl;
}
cout<<k<<endl;
return 0;}
1.5.15
http://noi.openjudge.cn/ch0105/15/
15:银行利息
农夫约翰在去年赚了一大笔钱!他想要把这些钱用于投资,并对自己能得到多少收益感到好奇。已知投资的复合年利率为\(R\)(0到20之间的整数)。约翰现有总值为\(M\)的钱(100到1,000,000之间的整数)。他清楚地知道自己要投资\(Y\)年(范围0到400)。请帮助他计算最终他会有多少钱,并输出它的整数部分。数据保证输出结果在32位有符号整数范围内。
输入
一行包含三个整数\(R,M,Y\),相邻两个整数之间用单个空格隔开。
输出
一个整数,即约翰最终拥有多少钱(整数部分)。
样例输入
5 5000 4
样例输出
6077
\(WA\)(9分)
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main(){
double r,m,y,r1;
scanf("%lf%lf%lf",&r,&m,&y);
double res;
res=m;
r1=1+r*0.01;
for(int i=0;i<y;i++){
res*=r1;
}
printf("%.0lf",fabs(res-0.5));
return 0;}
1.5.16
http://noi.openjudge.cn/ch0105/16/
某程序员开始工作,年薪\(N\)万,他希望在中关村公馆买一套60平米的房子,现在价格是200万,假设房子价格以每年百分之\(K\)增长,并且该程序员未来年薪不变,且不吃不喝,不用交税,每年所得N万全都积攒起来,问第几年能够买下这套房子?(第一年年薪N万,房价200万)
输入
一行,包含两个正整数N(\(10 \leq N \leq 50\)), K(\(1 \leq K \leq 20\)),中间用单个空格隔开。
输出
如果在第20年或者之前就能买下这套房子,则输出一个整数\(M\),表示最早需要在第\(M\)年能买下,否则输出\(Impossible\)。
样例输入
50 10
样例输出
8
WA(7分)
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main()
{
int N,K;
scanf("%d%d",&N,&K);
int totalm=0,totalfj=200;
for(int i=1;i<20;i++){
totalm+=N;
if(i==1) totalfj*=1;
if(i!=1) totalfj*=(1+K*0.01);
if(totalm>=totalfj) {
printf("%d",i);
return 0;
}
}
printf("Impossible");
return 0;
}
1.5.21
21:角谷猜想
所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数,则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整数为5,计算过程分别为16、8、4、2、1。
程序要求输入一个整数,将经过处理得到1的过程输出来。
输入
一个正整数N(\(N \leq 2,000,000\))
输出
从输入整数到1的步骤,每一步为一行,每一部中描述计算过程。最后一行输出"\(End\)"。如果输入为1,直接输出"\(End\)"。
http://noi.openjudge.cn/ch0105/21/
#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;
int main( ){
long long k;
scanf("%d",&k);
long long ke=k;(用int时Output limit exceeded)(用long long时WA9分)
while(ke!=1){
if(ke%2==0){
printf("%d/2=%d\n",ke,ke/2);
ke=ke/2;
}
else if(ke%2!=0){
printf("%d*3+1=%d\n",ke,ke*3+1);
ke=ke*3+1;
}
}
printf("End");
return 0;}
1.5.21
22:津津的储蓄计划
津津的零花钱一直都是自己管理。每个月的月初妈妈给津津300元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。
为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上\(20%\)还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于100元或恰好100元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。
例如11月初津津手中还有83元,妈妈给了津津300元。津津预计11月的花销是180元,那么她就会在妈妈那里存200元,自己留下183元。到了11月月末,津津手中会剩下3元钱。
津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。
现在请你根据2004年1月到12月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到2004年年末,妈妈将津津平常存的钱加上20%还给津津之后,津津手中会有多少钱。
输入
包括12行数据,每行包含一个小于350的非负整数,分别表示1月到12月津津的预算。
输出
包括一行,这一行只包含一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出\(-X\),\(X\)表示出现这种情况的第一个月;否则输出到2004年年末津津手中会有多少钱。
#include <bits/stdc++.h>
using namespace std;
int main(){
int num[12];
for(int i=0;i<12;i++)
{
cin>>num[i];
}
int money=300;
int store=0;
int flag=true;
for(int i=0;i<12;i++)
{
if(money-num[i]>=0)
{
store+=(money-num[i])/100*100;
money=money-(money-num[i])/100*100-num[i]+300;
}else{
cout<<"-"<<i+1;
flag=false;
break;
}
}
if(flag)
cout<<store+store*0.2+money%300;
return 0;}
1.5.25
25:求特殊自然数
一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示。
输入
无。
输出
三行:
第一行是此自然数的十进制表示;
第二行是此自然数的七进制表示;
第三行是此自然数的九进制表示。
#include <bits/stdc++.h>
using namespace std;
int get7(int num){
int num1=0,num2=0,num3=0;
num3=num%7;
num=num/7;
num2=num%7;
num=num/7;
num1=num;
return num1*100+num2*10+num3;}
int get9(int num){
int num1=0,num2=0,num3=0;
num3=num%9;
num=num/9;
num2=num%9;
num=num/9;
num1=num;
return num1*100+num2*10+num3;}
int getBack(int num){
int num1=0,num2=0,num3=0;
num1=num%10;
num=num/10;
num2=num%10;
num=num/10;
num3=num;
return num1*100+num2*10+num3;}
int main(){
for(int i=81;i<=342;i++)
{
if(get7(i)==getBack(get9(i)))
cout<<i<<endl<<get7(i)<<endl<<get9(i);
}
return 0;}
1.5.28
反向输出三位数(1到100000000之间)
#include <bits/stdc++.h>
using namespace std;
int main(){
int num;
cin>>num;
while(num>=10)
{
cout<<num%10<<" ";
num=num/10;
}
cout<<num;
return 0;}