信息学奥赛一本通算法(C版)基础算法:高精度计算
一本通网站练习目录及AC代码(基础篇己完结)
⼀本通⽹站练习⽬录及AC 代码(基础篇⼰完结)信息学奥赛⼀本通信息学奥赛⼀本通第⼀部分:C++语⾔第⼀部分:C++语⾔第⼀章 C++语⾔⼊门第⼀章 C++语⾔⼊门:⼊门测试题⽬#include<iostream>using namespace std;int main(){int a,b;cin>>a>>b;cout<<a+b;return 0;}点击查看AC 代码:Hello,World!#include<iostream>using namespace std;int main(){cout<<"Hello,World!";return 0;}点击查看AC 代码:输出第⼆个整数#include<iostream>using namespace std;int main(){int a,b,c;cin>>a>>b>>c;cout<<b;return 0;}点击查看AC 代码:对齐输出#include<iostream>#include<bits/stdc++.h>using namespace std;int main(){int a,b,c;cin>>a>>b>>c;cout<<fixed <<setw(8)<<a<<' ';cout<<fixed <<setw(8)<<b<<' ';cout<<fixed <<setw(8)<<c;return 0;}点击查看AC 代码:字符三⾓形#include<iostream>using namespace std;int main(){char ch;cin>>ch;cout<<" "<<ch<<'\n';cout<<" "<<ch<<ch<<ch<<'\n';cout<<ch<<ch<<ch<<ch<<ch<<'\n';return 0;}点击查看AC 代码:地球⼈⼝承载⼒估计#include<cstdio>int main(){int a,b,x,y;double z;scanf("%d %d %d %d",&x,&a,&y,&b);z=(a*x-b*y)/(a-b);printf("%.2f",z);return 0;}点击查看AC 代码第⼆章 顺序结构程序设计第⼆章 顺序结构程序设计第⼀节 运算符和表达式第⼀节 运算符和表达式:A+B 问题#include<iostream>using namespace std;int main(){int a,b;cin>>a>>b;cout<<a+b;return 0;}点击查看AC 代码:计算(a+b)×c 的值#include<iostream>using namespace std;int main(){int a,b,c;cin>>a>>b>>c;cout<<(a+b)*c<<endl;return 0;}点击查看AC 代码:计算(a+b)/c 的值#include<iostream>using namespace std;int main(){int a,b,c;cin>>a>>b>>c;cout<<(a+b)/c;return 0;}点击查看AC 代码:带余除法int main(){int bcs,cs,s,ys;cin>>bcs>>cs;s=bcs/cs;ys=bcs%cs;cout<<s<<' '<<ys;return 0;}点击查看AC 代码:计算分数的浮点数值#include<iostream>#include<iomanip>using namespace std;int main(){double a,b;cin>>a>>b;cout<<fixed <<setprecision(9)<<a/b;return 0;}点击查看AC 代码第⼆节 常量和变量第⼆节 常量和变量:甲流疫情死亡率#include<iostream>#include<iomanip>using namespace std;int main(){int a,b;cin>>a>>b;cout<<fixed <<setprecision(3)<<100.0*b/a<<'%'<<endl;return 0;}点击查看AC 代码:计算多项式的值#include<iostream>#include<iomanip>using namespace std;int main(){double x,a,b,c,d;cin>>x>>a>>b>>c>>d;cout<<fixed <<setprecision(7)<<x*(x*(a*x+b)+c)+d;return 0;}点击查看AC 代码:温度表达转化#include<iostream>#include<iomanip>using namespace std;int main(){double f;cin>>f;cout<<fixed <<setprecision(5)<<(f-32)/9*5;return 0;}点击查看AC 代码:与圆相关的计算#include<iomanip>int main(){double r,pi=3.14159,d,c,s;cin>>r;d=r*2;c=pi*2*r;s=pi*r*r;cout<<fixed <<setprecision(4)<<d;cout<<' '<<fixed <<setprecision(4)<<c;cout<<' '<<fixed <<setprecision(4)<<s;return 0;}点击查看AC 代码:计算并联电阻的阻值#include<iostream>using namespace std;#include<iomanip> //int main(){float r1,r2;cin>>r1>>r2;cout<<fixed <<setprecision(2)<<r1*r2/(r1+r2);return 0;}点击查看AC 代码第三节 标准数据类型第三节 标准数据类型:整型数据类型存储空间⼤⼩#include<iostream>using namespace std;//#include<iomanip> fixed<<setprecisionint main(){cout<<sizeof (int )<<' '<<sizeof (short )<<endl;return 0;}点击查看AC 代码:浮点型数据类型存储空间⼤⼩#include<iostream>using namespace std;//#include<iomanip> fixed<<setprecisionint main(){cout<<sizeof (float )<<' '<<sizeof (double )<<endl;return 0;}点击查看AC 代码:其他数据类型存储空间⼤⼩#include<iostream>using namespace std;//#include<iomanip> fixed<<setprecisionint main(){cout<<sizeof (bool )<<' '<<sizeof (char )<<endl;return 0;}点击查看AC 代码:浮点数向零舍⼊#include<iostream>using namespace std;//#include<iomanip> fixed<<setprecisionint main(){float a;int b;cin>>a;b=int (a);cout<<b<<endl;return 0;}点击查看AC 代码:打印ASCII 码#include<iostream>using namespace std;//#include<iomanip> fixed<<setprecisionint main(){char ch;cin>>ch;cout<<ch+0<<endl;return 0;}点击查看AC 代码:打印字符#include<iostream>using namespace std;//#include<iomanip> fixed<<setprecisionint main(){int n;cin>>n;cout<<char (n)<<endl;return 0;}点击查看AC 代码:整型与布尔型的转换#include<iostream>using namespace std;int main(){int n;bool bl;cin>>n;bl=bool (n);n=bl;cout<<n<<endl;return 0;}点击查看AC 代码:Hello,World!的⼤⼩#include<iostream>using namespace std;int main(){cout<<sizeof ("Hello, World!");return 0;}点击查看AC 代码第四节 数据输⼊输出第四节 数据输⼊输出:保留3位⼩数的浮点数#include<iostream>#include<iomanip>using namespace std;int main(){float a;cin>>a;cout<<fixed <<setprecision(3)<<a<<endl;return 0;}点击查看AC 代码:保留12位⼩数的浮点数#include<iostream>#include<iomanip>using namespace std;int main(){double a;cin>>a;cout<<fixed <<setprecision(12)<<a<<endl;return 0;}点击查看AC 代码:空格分隔输出#include<iostream>#include<iomanip>using namespace std;int main(){char a;int b;float c;double d;cin>>a>>b>>c>>d;cout<<a<<' '<<b<<' '<<fixed <<setprecision(6)<<c<<' '<<d<<endl; return 0;}点击查看AC 代码:输出浮点数#include<cstdio>using namespace std;int main(){double a;scanf("%lf",&a);printf("%lf\n%.5lf\n%e\n%g",a,a,a,a);return 0;}点击查看AC 代码:字符菱形#include<iostream>using namespace std;int main(){int flag=0,m=3;char ch;cin>>ch;for (int i=1;i<=2*m-1;i++){int tmpi=i>m?2*m-i:i;for (int j=1;j<m+1-tmpi;j++)cout<<' ';for (int j=1;j<=2*tmpi-1;j++)cout<<ch;cout<<'\n';}return 0;}点击查看AC 代码第五节 顺序结构实例第五节 顺序结构实例:计算浮点数相除的余#include<iostream>using namespace std;#include<cmath>int main(){double a,b;cin>>a>>b;int k=floor(a/b);cout<<a-k*b;return 0;}点击查看AC代码:计算球的体积#include<iostream>#include<iomanip>using namespace std;const double pi=3.14;int main(){double r;cin>>r;cout<<fixed<<setprecision(2)<<4*pi/3*r*r*r<<endl;return0;}点击查看AC代码:反向输出⼀个三位数#include<iostream>using namespace std;int main(){int a;cin>>a;do{cout<<a%10;a/=10;}while(a);return0;}点击查看AC代码:⼤象喝⽔查#include<iostream>using namespace std;const double pi=3.14159;int main(){int h,r;cin>>h>>r;cout<<int(20000/(pi*r*r*h))+1;return0;}点击查看AC代码:计算线段长度#include<iostream>#include<cmath>#include<iomanip>using namespace std;int main(){double xa,ya,xb,yb;cin>>xa>>ya>>xb>>yb;cout<< fixed<<setprecision(3)<<sqrt((xa-xb)*(xa-xb)+(ya-yb)*(ya-yb)); return0;}点击查看AC代码:计算三⾓形⾯积#include<iostream>#include<cmath>#include<iomanip>using namespace std;double jl(double x1,double y1,double x2,double y2){return sqrt((x1-x2)*(x1-x2)+(y2-y1)*(y2-y1));}int main(){double x1,y1,x2,y2,x3,y3,p,a,b,c,s;cin>>x1>>y1>>x2>>y2>>x3>>y3;a=jl(x1,y1,x2,y2);b=jl(x2,y2,x3,y3);c=jl(x1,y1,x3,y3);p=(a+b+c)/2;s=sqrt(p*(p-a)*(p-b)*(p-c));cout<<fixed <<setprecision(2)<<s<<endl; return 0;}点击查看AC 代码:等差数列末项计算#include<iostream>using namespace std;int main(){int a1,a2,n;cin>>a1>>a2>>n;cout<<a1+(n-1)*(a2-a1);return 0;}点击查看AC 代码:A×B 问题#include<iostream>using namespace std;#include<cmath>int main(){int a,b;cin>>a>>b;cout<<1ll*a*b;return 0;}点击查看AC 代码:计算2的幂#include<iostream>using namespace std;int main(){int n;cin>>n;long long m=1;for (int i=1;i<=n;i++)m*=2;cout<<m<<endl;return 0;}点击查看AC 代码:苹果和⾍⼦#include<iostream>using namespace std;int main(){int n,x,y,m;cin>>n>>x>>y;m=n-1.0*y/x;if (m<0)m=0;cout<<m<<endl;return 0;}点击查看AC 代码第三章 程序的控制结构第三章 程序的控制结构第⼀节 if 选择结构第⼀节 if 选择结构:判断数正负#include<iostream>using namespace std;int main(){int n;cin>>n;if (n>0)cout<<"positive";else cout<<(n==0?"zero":"negative")<<endl;}点击查看AC代码:输出绝对值#include<iostream>#include<iomanip>using namespace std;int main(){double a;cin>>a;cout<<fixed<<setprecision(2)<<(a>0?a:a*(-1)); return0;}点击查看AC代码:奇偶数判断#include<iostream>using namespace std;int main(){long a;cin>>a;cout<<(a%2?"odd":"even");return0;}点击查看AC代码:奇偶ASCII值判断#include<cstdio>int main(){if(getchar()%2)printf("YES");else printf("NO");return0;}点击查看AC代码:整数⼤⼩⽐较#include<iostream>using namespace std;int main(){long long a,b;cin>>a>>b;if(a>b)cout<<'>';else cout<<(a==b?'=':'<');return0;}点击查看AC代码:判断是否为两位数#include<iostream>using namespace std;int main(){short n;cin>>n;if(n>=10&&n<=99)cout<<1;else cout<<0;return0;}点击查看AC代码:收集瓶盖赢⼤奖#include<iostream>using namespace std;int main(){double a,b;if (a>=10||b>=20)cout<<1;else cout<<0;return 0;}点击查看AC 代码:判断⼀个数能否同时被3和5整除#include<iostream>using namespace std;int main(){long long n;cin>>n;if (n%3==0&&n%5==0)cout<<"YES"; else cout<<"NO";return 0;}点击查看AC 代码:判断能否被3,5,7整除#include<iostream>using namespace std;int main(){long long n;cin>>n;if (n%3==0&&n%5==0)cout<<"YES"; else cout<<"NO";return 0;}点击查看AC 代码:有⼀门课不及格的学⽣#include<iostream>using namespace std;int main(){long long n;cin>>n;if (n%3==0&&n%5==0)cout<<"YES"; else cout<<"NO";return 0;}点击查看AC 代码第⼆节 switch 语句第⼆节 switch 语句:晶晶赴约会#include<iostream>using namespace std;int main(){int n;cin>>n;if (n==1||n==3||n==5)cout<<"NO"; else cout<<"YES";return 0;}点击查看AC 代码:骑车与⾛路#include<iostream>using namespace std;int main(){double x,b,w;cin>>x;b=27+23+x/3;w=x/1.2;if (w>b)cout<<"Bike";else cout<<(w==b?"All":"Walk");return0;}点击查看AC代码:分段函数#include<iostream>#include<iomanip>using namespace std;int main(){float x,y;cin>>x;if(x<5)y=2.5-x;else if(x>=10)y=x/2-1.5;else y=2-1.5*(x-3)*(x-3);cout<<fixed<<setprecision(3)<<y;return0;}点击查看AC代码:计算邮资#include<iostream>using namespace std;int main(){int n,p;char a;cin>>n>>a;p=n>1000?(8+(n-1000+499)/500*4):8;p+=(a=='y'?5:0);cout<<p;return0;}点击查看AC代码:最⼤数输出#include<iostream>using namespace std;int main(){int a,b,c,maxn;cin>>a>>b>>c;maxn=a;if(maxn<b)maxn=b;if(maxn<c)maxn=c;cout<<maxn;return0;}点击查看AC代码:三⾓形判断#include<iostream>using namespace std;int main(){int a,b,c;cin>>a>>b>>c;if(a+b>c&&a+c>b&&b+c>a)cout<<"yes";else cout<<"no";return0;}点击查看AC代码:判断闰年#include<iostream>using namespace std;int main(){int n;cin>>n;cout<<(n%100==0&&n%400!=0||n%4!=0?'N':'Y'); return0;}点击查看AC代码:点和正⽅形的关系#include<iostream>using namespace std;int main(){long long x,y;cin>>x>>y;if((-1<=x)&&(x<=1)&&(-1<=y)&&(y<=1))cout<<"yes";else cout<<"no";return0;}点击查看AC代码:简单计算器#include<iostream>using namespace std;int main(){int a,b;char c;cin>>a>>b>>c;switch(c){case'+':cout<<a+b;break;case'-':cout<<a-b;break;case'*':cout<<a*b;break;case'/':if(b==0)cout<<"Divided by zero!";else cout<<a/b;break;default:cout<<"Invalid operator!";}return0;}点击查看AC代码:求⼀元⼆次⽅程#include<iostream>#include<cmath>#include<iomanip>using namespace std;int main(){double a,b,c;cin>>a>>b>>c;double det;det=b*b-4*a*c;if(det<-1e-12){cout<<"No answer!";}else{if(fabs(det)<1e-12){cout<<"x1=x2="<<fixed<<setprecision(5)<<-b/(2*a);}else{double x1,x2;x1=(-b+sqrt(det))/2/a;x2=(-b-sqrt(det))/2/a;if(x1<x2){cout<<"x1="<<fixed<<setprecision(5)<<x1<<";x2="<<fixed<<setprecision(5)<<x2; }else{cout<<"x1="<<fixed<<setprecision(5)<<x2<<";x2="<<fixed<<setprecision(5)<<x1; }}}return0;}点击查看AC代码第四章 循环结构的程序设计第四章 循环结构的程序设计第⼀节 for 语句第⼀节 for 语句:求平均年龄#include<iostream>#include<iomanip>using namespace std;int main(){int n,b[1000],sum=0;cin>>n;for (int i=1;i<=n;i++){cin>>b[i];sum+=b[i];}cout<<fixed <<setprecision(2)<<1.0*sum/n; return 0;}点击查看AC 代码:均值#include<iostream>#include<iomanip>using namespace std;int main(){int n;cin>>n;double a[1000],sum=0;for (int i=1;i<=n;i++){cin>>a[i];sum+=a[i];}cout<<fixed <<setprecision(4)<<sum/n; return 0;}点击查看AC 代码:求整数的和与均值#include<iostream>#include<iomanip>using namespace std;int main(){int n,a[10001],sum=0;cin>>n;for (int i=1;i<=n;i++){cin>>a[i];sum+=a[i];}cout<<sum<<' '<<fixed <<setprecision(5)<<1.0*sum/n; return 0;}点击查看AC 代码:最⾼的分数#include<iostream>using namespace std;int main(){int n,a[1000],maxn=-1;cin>>n;for (int i=1;i<=n;i++){cin>>a[i];if (a[i]>maxn)maxn=a[i];}cout<<maxn;return 0;}点击查看AC代码:最⼤跨度值#include<iostream>using namespace std;int main(){int n,a[1001],maxn=-1,minn=1001;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];if(minn>a[i])minn=a[i];if(maxn<a[i])maxn=a[i];}cout<<maxn-minn;return0;}点击查看AC代码:奥运奖牌计数#include<iostream>using namespace std;int main(){int n,a,b,c,suma=0,sumb=0,sumc=0,sum;cin>>n;for(int i=1;i<=n;i++){cin>>a>>b>>c;suma+=a,sumb+=b,sumc+=c;}sum=suma+sumb+sumc;cout<<suma<<''<<sumb<<''<<sumc<<''<<sum; return0;}点击查看AC代码:奇数求和#include<iostream>using namespace std;int main(){int m,n,sum=0;cin>>m>>n;for(int i=m;i<=n;i++)if(i%2)sum+=i;cout<<sum;return0;}点击查看AC代码:满⾜条件的数累加#include<iostream>using namespace std;int main(){int m,n,sum=0;cin>>m>>n;for(int i=m;i<=n;i++)if(!(i%17))sum+=i;cout<<sum;return0;}点击查看AC代码:整数的个数#include<iostream>using namespace std;int main(){int n,m,sum1=0,sum5=0,sum10=0;cin>>n;for(int i=1;i<=n;i++){cin>>m;if(m==1)sum1++;if(m==5)sum5++;if(m==10)sum10++;}cout<<sum1<<'\n'<<sum5<<'\n'<<sum10; return0;}点击查看AC代码:与指定数字相同的数的个数#include<iostream>using namespace std;int main(){int n,x,m,sum=0;cin>>n>>m;for(int i=1;i<=n;i++){cin>>x;if(x==m)sum++;}cout<<sum;return0;}点击查看AC代码:乘⽅计算#include<iostream>using namespace std;int main(){int a,n,ans=1;cin>>a>>n;for(int i=1;i<=n;i++)ans*=a;cout<<ans;return0;}点击查看AC代码:⼈⼝增长#include<iostream>#include<iomanip>using namespace std;int main(){double a,n,ans=1;cin>>a>>n;for(int i=1;i<=n;i++)ans*=1.001;cout<<fixed<<setprecision(4)<<ans*a; return0;}点击查看AC代码:菲波那契数#include<iostream>using namespace std;int main(){int k,a[50];cin>>k;a[1]=1,a[2]=1;for(int i=3;i<=k;i++)a[i]=a[i-1]+a[i-2];cout<<a[k];return0;}点击查看AC代码:鸡尾酒疗法#include<iostream>#include<cmath>#include<cstdio>using namespace std;int main(){int n;double z,y,z1,y1,jd=1e-6;double new1,old;cin>>n;cin>>z>>y;old=y/z; //这个计算要放在循环外⾯才⾏for(int i=0;i<n-1;i++){cin>>z1>>y1;new1=y1/z1;old=y/z; //这个计算要放在循环外⾯才⾏if(new1-old>0.05-jd) cout<<"better"<<endl;else if((old-new1)>0.05-jd) cout<<"worse"<<endl;else cout<<"same"<<endl;}return0;}点击查看AC代码:救援#include<iostream>#include<cmath>using namespace std;int main(){double n,a,b,c,sum=0;int s;cin>>n;for(int i=1;i<=n;i++){cin>>a>>b>>c;sum+=sqrt(a*a+b*b)/25+1.5*c;}s=ceil(sum);cout<<s;return0;}点击查看AC代码:津津的储蓄计划#include<iostream>using namespace std;int main(){int a[13],b=0,sum=0,i;for(i=1;i<=12;i++)cin>>a[i];for(i=1;i<=12;i++){b+=300-a[i];if(b<0)break;sum+=b/100*100;b%=100;}if(i==13)cout<<1.2*sum+b;else cout<<-i;return0;}点击查看AC代码:药房管理#include<iostream>using namespace std;int main(){int n,m,a,ans=0;cin>>n>>m;for(int i=1;i<=m;i++){cin>>a;if(n>=a)n-=a;else ans++;}cout<<ans;return0;}点击查看AC代码:正常⾎压#include<iostream>using namespace std;int main(){int n,a,b,ans=0,maxn=-1;cin>>n;for(int i=1;i<=n;i++){cin>>a>>b;if(90<=a&&a<=140&&60<=b&&b<=90){ ans++;if(ans>maxn)maxn=ans;}else ans=0;}cout<<maxn;return0;}点击查看AC代码:统计满⾜条件的4位数#include<iostream>using namespace std;int main(){int n,a,a1,a2,a3,a4,ans=0;cin>>n;for(int i=1;i<=n;i++){cin>>a;a1=a%10;a2=a/10%10;a3=a/100%10;a4=a/1000;if(a1>a2+a3+a4)ans++;}cout<<ans;return0;}点击查看AC代码:求分数序列和#include<iostream>#include<iomanip>using namespace std;int main(){float n,p,q,tmp,ans=0;p=1,q=2,ans=q/p;cin>>n;for(int i=2;i<=n;i++){tmp=q;q+=p;p=tmp;ans+=q/p;}cout<<fixed<<setprecision(4)<<ans; return0;}点击查看AC代码:计算分数加减表达式的值#include<iostream>#include<iomanip>using namespace std;int main(){int n;double s;cin>>n;for(int i=1;i<=n;i++)s+=(i%2?1.0/i:-1.0/i);cout<<fixed<<setprecision(4)<<s; return0;}点击查看AC代码:余数相同问题#include<iostream>using namespace std;int main(){int a,b,c,ans;cin>>a>>b>>c;for(int i=2;i<=a||a<=b||a<=c;i++)if(a%i==b%i&&a%i==c%i){ans=i;break;}cout<<ans;return0;}点击查看AC代码:分苹果#include<iostream>using namespace std;int main(){int n;cin>>n;cout<<n*(n+1)/2;return0;}点击查看AC代码:求⼩数的某⼀位#include<iostream>using namespace std;int main(){int a,b,c,ans;cin>>a>>b>>c;a%=b;for(int i=1;i<=c;i++){ans=a*10/b;a=a*10%b;}cout<<ans;return0;}点击查看AC代码:计算星期⼏#include<iostream>#include<cmath>#include<cstdio>using namespace std;int main(){int a,b,xh=0,sum=1;//循环int yx;//有效的次⽅cin>>a>>b;a%=7;for (int i=1;i<=b;i++){sum=sum*a;if ((sum%7==a)&&i>1){xh=i-1;break ;}}if (xh>1){yx=int (pow(a,b%xh))%7;}else{yx=sum%7;}switch (yx){case 1:cout<<"Monday";break ; case 2:cout<<"Tuesday";break ; case 3:cout<<"Wednesday";break ; case 4:cout<<"Thursday";break ; case 5:cout<<"Friday";break ; case 6:cout<<"Saturday";break ; case 0:cout<<"Sunday";break ; }return 0;}点击查看AC 代码:幂的末尾#include<iostream>#include<iomanip>using namespace std;int main(){int a,b,ans;cin>>a>>b;ans=a%1000;for (int i=1;i<b;i++)ans=ans*a%1000;cout<<setfill('0')<<setw(3)<<ans; return 0;}点击查看AC 代码第⼆节 while 语句第⼆节 while 语句:球弹跳⾼度的计算#include<iostream>using namespace std;int main(){double h0,n=10,s,h;cin>>h0;s=-h0,h=h0;for (int i=1;i<=n;i++){s+=h*2;h/=2;}cout<<s<<'\n'<<h;return 0;}点击查看AC 代码:⾓⾕猜想#include<iostream>using namespace std;int main(){int n;cin>>n;while(n!=1){if(n%2){cout<<n<<"*3+1=";n=n*3+1;cout<<n<<'\n';}else{cout<<n<<'/'<<2<<'=';n/=2;cout<<n<<'\n';}}cout<<"End";return0;}点击查看AC代码:级数求和#include<iostream>using namespace std;int main(){double k,ans=0;long long n=1;cin>>k;while(ans<=k+(1e-16)){ans+=1.0/n++;}cout<<n-1;return0;}点击查看AC代码:分离整数的各个数#include<iostream>using namespace std;int main(){int n;cin>>n;cout<<n%10;n/=10;while(n){cout<<''<<n%10;n/=10;}return0;}点击查看AC代码:数字反转#include<iostream>using namespace std;int main(){//余数⾃带符号,如(-31)%10=-1 int n,ans=0;cin>>n;while(n){ans=ans*10+n%10;n/=10;}cout<<ans;return0;}点击查看AC代码#include<iostream>using namespace std;int main(){int n,k,ans=0;cin>>n>>k;if (n%19)cout<<"NO";else{while (n){if (n%10==3)ans++;n/=10;}if (ans==k)cout<<"YES";else cout<<"NO";}return 0;}点击查看AC 代码第三节 do-while 语句第三节 do-while 语句:球弹跳⾼度的计算//1085:球弹跳⾼度的计算#include<iostream>using namespace std;int main(){double h,ans,i;cin>>h;ans=-h;i=0;do{ans+=h*2;h/=2;i++;}while (i<10);cout<<ans<<endl<<h;return 0;}点击查看AC 代码:⾓⾕猜想//1086:⾓⾕猜想#include<iostream>using namespace std;int main(){int n;cin>>n;do{cout<<n;if (n%2){cout<<"*3+1=";n=n*3+1;}else{cout<<"/2=";n/=2;}cout<<n<<endl;}while (n!=1);cout<<"End"<<endl;return 0;}点击查看AC 代码:级数求和#include<iostream> using namespace std;int main(){double s=0;int k,n=0;cin>>k;do{n++;s+=1.0/n;}while(s-k<1e-12);cout<<n;return0;}点击查看AC代码:分离整数的各个数//1088:分离整数的各个数#include<iostream> using namespace std;int main(){int n;cin>>n;do{cout<<n%10<<'';n/=10;}while(n);return0;}点击查看AC代码:数字反转//1089:数字反转#include<iostream> using namespace std;int main(){int n,ans=0,f=1;cin>>n;if(n<0)f=-1,n=-n;do{ans=ans*10+n%10; n/=10;}while(n);ans*=f;cout<<ans;return0;}点击查看AC代码:含k个3的数//1090:含k个3的数#include<iostream> using namespace std;int main(){int n,k;cin>>n>>k;do{if(n%10==3)k--;n/=10;}while(n);if(k)cout<<"NO";else cout<<"YES"; return0;}点击查看AC代码第四节循环嵌套using namespace std;long long a[100];int main(){int n;long long sum=0;cin>>n;a[0]=1;for(int i=1;i<=n;i++){a[i]=a[i-1]*i ;sum+=a[i];}cout<<sum;return0;}点击查看AC代码:求出e的值#include<iostream>#include<iomanip>using namespace std;double a[1000];int main(){double n, sum=1;cin>>n;a[0]=1;for(int i=1;i<=n;i++){a[i]=a[i-1]/i ;sum+=a[i];}cout<<fixed<<setprecision(10)<<sum; return0;}点击查看AC代码:计算多项式的值#include<iostream>#include<cmath>#include<iomanip>using namespace std;int main(){double x,b;int n;cin>>x>>n;b=(pow(x,n+1)-1)/(x-1);cout<<fixed<<setprecision(2)<<b; return0;}点击查看AC代码:与7⽆关的数#include<iostream>using namespace std;bool cont(int n){while(n){if(n%10==7)return true;n/=10;}return false;}int main(){int n,sum=0;cin>>n;for(int i=1;i<=n;i++)if(!cont(i)&&(i%7))sum+=i*i;cout<<sum;return0;}。
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1074:津津的储蓄计划
信息学奥赛⼀本通(C++)在线评测系统——基础(⼀)C++语⾔——1074:津津的储蓄计划时间限制: 1000 ms 内存限制: 65536 KB提交数: 11986 通过数: 5727【题⽬描述】津津的零花钱⼀直都是⾃⼰管理。
每个⽉的⽉初妈妈给津津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年年末津津⼿中会有多少钱。
【输⼊样例】29023028020030017034050908020060【输出样例】-7【样例2】输⼊:29023028020030017033050908020060输出:1580【来源】NO代码#include <stdio.h>int main (){int month[13],meiyuelinghuaqian[13],meiyueshengqian[13],mamacunqian=0;meiyuelinghuaqian[1]=300;for(int i=1;i<=12;i++){scanf("%d",&month[i]);if((meiyuelinghuaqian[i]-month[i]>0)&&((meiyuelinghuaqian[i]-month[i])/100==0)){meiyueshengqian[i]=meiyuelinghuaqian[i]-month[i];}if((meiyuelinghuaqian[i]-month[i]>0)&&((meiyuelinghuaqian[i]-month[i])/100>0)){meiyueshengqian[i]=meiyuelinghuaqian[i]-month[i]-int((meiyuelinghuaqian[i]-month[i])/100)*100; mamacunqian+=int((meiyuelinghuaqian[i]-month[i])/100)*100;}if(meiyuelinghuaqian[i]-month[i]<0){printf("-%d",i);return 0;}meiyuelinghuaqian[i+1]=300+meiyueshengqian[i];}int x=int(mamacunqian*1.2+meiyueshengqian[12]);printf("%d",x);return 0;}。
《信息学奥赛一本通》:第9章 第2节 动态规划背包问题(C++版)
【参考程序】
#include<cstdio> using namespace std;
const int maxm = 201, maxn = 31;
int m, n;
int w[maxn], c[maxn];
int f[maxn][maxm];
int main()
{
scanf("%d%d",&m, &n);
for (int i=1; i <= n; i++)
//设f(v)表示重量不超过v公斤的最大价值
for (int v = m; v >= w[i]; v--)
if (f[v-w[i]]+c[i]>f[v])
f[v] = f[v-w[i]]+c[i];
printf("%d",f[m]);
// f(m)为最优解
【例9-12】、完全背包问题 【问题描述】
设有n种物品,每种物品有一个重量及一个价值。但每种物品的数量是无限 的,同时有一个背包,最大载重量为M,今从n种物品中选取若干件(同一种物品 可以多次选取),使其重量的和小于等于M,而价值的和为最大。
【输入格式】
第一行:两个整数,M(背包容量,M<=200)和N(物品数量,N<=30); 第2..N+1行:每行二个整数Wi,Ci,表示每个物品的重量和价值。 【输出格式】
第九章 动态规划
第二节 背包问题
第二节 背包问题
一、01背包问题 问题:
有N件物品和一个容量为V的背包。第i件物品的费用(即体积,下同)是w[i], 价值是c[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量, 且价值总和最大。 基本思路:
信息学奥赛一本通
信息学奥赛一本通信息学奥赛一本通——为你揭开计算世界的神秘面纱信息学奥赛一本通是一本备受青少年学子追捧的图书,旨在帮助读者了解计算科学与技术的基本概念和方法,培养他们的信息学思维和问题解决能力。
这本书不仅扎实全面地阐述了各个知识领域的原理和技术,同时也给读者提供了丰富的习题和案例分析,用实践帮助读者巩固知识、拓宽思路。
信息学奥赛一本通旨在向普通读者普及计算机科学基础知识,并引导他们进一步了解计算机科学的发展历程和应用领域。
从最基本的二进制数和布尔代数开始,逐步介绍了计算机的组成原理、算法与数据结构、编程语言、操作系统、网络与通信等知识点。
无论是对初学者还是对信息学竞赛选手而言,这本书都是一本不可或缺的必备资料。
在信息学奥赛一本通中,作者以通俗易懂的语言,将复杂的概念浓缩为简洁的文字,配以实例进行解释,帮助读者理解并掌握知识点。
以逻辑与算法为例,书中从简单的逻辑表达式开始,逐渐引入布尔代数、真值表、逻辑电路,最后讲解了一些经典的算法,如排序、查找、图论算法等。
通过这样的方式,读者不仅能了解逻辑与算法的基本原理,还能学会如何运用这些原理解决实际问题。
另外,信息学奥赛一本通也注重培养读者的实践能力。
书中提供了大量的习题和案例分析,读者可以通过编写代码、调试程序、解决问题等方式进行实践。
这样的练习既能让读者巩固所学知识,又能锻炼他们的问题解决能力和创新思维。
通过多次实践,读者们将越来越熟练地运用所学知识解决实际问题,并逐渐培养出自己的信息学思维方式。
不仅如此,信息学奥赛一本通还注重启发读者的思维,培养他们的创新能力。
在书中,作者引入了一些新颖的思维模式和问题解决方法,并通过案例分析展示了这些方法的应用。
这些案例既有趣味性,又具有一定的挑战性,读者可以通过分析问题、开展思考,找到解决问题的创新思路。
这样的训练将帮助读者在信息学竞赛中脱颖而出,并在未来的科技领域中有更广阔的发展空间。
信息学奥赛一本通是一本科普性质的读物,本着简单易懂的原则,采用通俗的语言,诠释了计算机科学的基本概念和方法。
一本通信息学奥赛 顺序结构实例
一本通信息学奥赛顺序结构实例一本通信息学奥赛是一本经典的信息学竞赛教材,本书以顺序结构为基础,通过示例讲解了一系列的信息学算法和问题解决方法。
下面将以一些实例来说明顺序结构在解决信息学问题中的应用。
问题1:求两个数的和我们首先给出一个简单的问题,求两个数的和。
这个问题可以通过顺序结构来解决,具体的算法如下:1.输入两个数a和b;2.计算它们的和,即sum = a + b;3.输出结果sum。
问题2:求圆的面积现在我们希望计算一个圆的面积,同样可以使用顺序结构来解决。
具体的算法如下:1.输入圆的半径r;2.计算圆的面积,即area = π * r^2(其中π为圆周率);3.输出结果area。
问题3:求一元二次方程的根接下来我们考虑一个更加复杂的问题,求一元二次方程ax^2+bx+c=0的根。
这个问题可以通过顺序结构和一些数学知识来解决。
具体的算法如下:1.输入方程的系数a、b、c;2.计算方程的判别式delta = b^2 - 4ac;3.判断判别式delta的值:-如果delta大于0,则方程有两个实根,根的计算公式为x1 = (-b + √delta) / (2a)和x2 = (-b - √delta) / (2a);-如果delta等于0,则方程有一个实根,根的计算公式为x = -b / (2a);-如果delta小于0,则方程无实根;4.输出方程的根。
问题4:求斐波那契数列最后我们考虑一个更加复杂和有趣的问题,求斐波那契数列的第n 个数。
斐波那契数列是指从0和1开始,第n个数是前两个数之和的数列。
具体的算法如下:1.输入数列的长度n;2.初始化斐波那契数列的前两个数为0和1;3.循环n - 2次进行如下操作:-计算下一个数fibonacci =前两个数之和;-更新前两个数,第一个数等于第二个数,第二个数等于计算得到的下一个数;4.输出斐波那契数列的第n个数。
总结:上述实例展示了顺序结构在解决信息学问题中的应用。
信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1062:最高的分数
信息学奥赛⼀本通(C++)在线评测系统——基础(⼀)C++语
⾔——1062:最⾼的分数
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 13030 通过数: 9960
【题⽬描述】
孙⽼师讲授的《计算概论》这门课期中考试刚刚结束,他想知道考试中取得的最⾼分数。
因为⼈数⽐较多,他觉得这件事情交给计算机来做⽐较⽅便。
你能帮孙⽼师解决这个问题吗?
【输⼊】
输⼊两⾏,第⼀⾏为整数n(1 ≤ n < 100),表⽰参加这次考试的⼈数.第⼆⾏是这n个学⽣的成绩,相邻两个数之间⽤单个空格隔开。
所有成绩均为0到100之间的整数。
【输出】
输出⼀个整数,即最⾼的成绩。
【输⼊样例】
5
85 78 90 99 60
【输出样例】
99
【来源】
No
代码
#include <stdio.h>
int main ()
{
int n,max=0;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
if(a[i]>max)
max=a[i];
}
printf("%d",max);
}。
c++信息学奥赛一本通幸运数题解
《幸运数》题解:深入探讨C++信息学奥赛一本通1. 引言在信息学竞赛中,幸运数问题是一个经典的题目,它涉及到数学和编程的结合,需要我们用算法来解决。
在C++信息学奥赛一本通中,幸运数题目是一个常见的考点,掌握其解题方法对于提高编程能力非常重要。
在本文中,我们将深入探讨C++信息学奥赛一本通中的幸运数题目,并给出详细的解题思路和代码实现。
2. 题目背景幸运数问题是一个经典的数学问题,它要求我们找出一定范围内的幸运数个数。
在C++信息学奥赛一本通中,这个问题被进一步拓展,需要我们设计一个高效的算法来解决。
3. 问题分析幸运数问题涉及到对一定范围内的数进行筛选,找出符合条件的数并统计个数。
在C++信息学奥赛一本通中,这个问题被具体化为一道题目,要求我们编写一个程序,找出某个范围内的幸运数个数。
这就需要我们深入分析题目要求,找出解题的关键点。
4. 解题思路针对幸运数问题,我们可以采用筛选法来解决。
具体来说,我们可以从小到大逐个筛选出符合条件的数,然后进行统计。
在C++信息学奥赛一本通中,可以利用数组或者标记来实现筛选,然后通过循环来进行统计。
5. 代码实现下面是一个简单的C++代码实现,用于找出1到n范围内的幸运数个数:```cpp#include <iostream>using namespace std;int main() {int n;cin >> n;bool isLucky[n+1];memset(isLucky, true, sizeof(isLucky));for (int i = 2; i <= n; i++) {if (isLucky[i]) {for (int j = i + i; j <= n; j += i) {isLucky[j] = false;}}}int count = 0;for (int i = 2; i <= n; i++) {if (isLucky[i]) {count++;}}cout << count << endl;return 0;}```6. 总结与回顾通过以上代码实现,我们可以清晰地看到幸运数问题的解题过程。
信息学奥赛一本通—c 语言程序的结构:
信息学奥赛一本通—c 语言程序的结构:摘要:一、信息学奥赛一本通简介二、C 语言程序的基本结构三、C 语言程序的设计方法四、C 语言程序的实战演练五、总结正文:【一、信息学奥赛一本通简介】《信息学奥赛一本通》是一本针对中学生信息学奥林匹克竞赛的辅导教材。
本书内容涵盖了计算机编程基础知识、数据结构与算法、计算机网络等多个方面,旨在帮助学生提高编程技能,锻炼逻辑思维能力,并备战信息学奥赛。
【二、C 语言程序的基本结构】C 语言是一种广泛应用于计算机编程的高级语言。
一个C 语言程序的基本结构包括以下几个部分:1.预处理指令:预处理指令主要用于处理宏定义、头文件包含等预处理命令。
2.主函数:主函数是程序的入口,程序执行从主函数开始。
3.函数:函数是C 语言程序的基本模块,用于实现特定功能。
4.变量与常量:变量用于存储数据,常量是具有固定值的量。
5.控制结构:控制结构包括条件语句、循环语句等,用于控制程序的执行流程。
6.表达式与运算符:表达式是由运算符和操作数组成的式子,用于计算结果。
【三、C 语言程序的设计方法】C 语言程序的设计方法主要包括以下几种:1.面向过程设计:面向过程设计是一种以过程(函数)为中心的编程方法,关注数据结构和算法的实现。
2.面向对象设计:面向对象设计是一种以对象为中心的编程方法,关注类与对象的定义、属性和方法。
3.模块化设计:模块化设计是将程序划分为若干个模块,每个模块具有独立的功能和职责。
【四、C 语言程序的实战演练】以下是一个简单的C 语言程序实例,实现计算两个整数的和的功能:```c#include <stdio.h>int add(int a, int b) {return a + b;}int main() {int num1, num2, sum;printf("请输入两个整数:");scanf("%d%d", &num1, &num2);sum = add(num1, num2);printf("两数之和为:%d", sum);return 0;}```【五、总结】学习C 语言编程,需要掌握基本的程序结构、语法规则以及设计方法。
《信息学奥赛一本通》:第9章 第1节 动态规划基础(C++版)-2018-11-17
#include <iostream> #include <algorithm> using namespace std; const int MAXN = 505; int A[MAXN][MAXN],F[MAXN][MAXN],N; int Dfs(int x,int y) {
②第一步向右:这类路径要求先从(x,y)到(x+1,y+1)再从(x+1,y+1)到终 点,分析方法与上面一样,这类路径最大权值和为A[x][y]+Dfs(x+1,y+1);
为了避免重复搜索,我们开设全局数组F[x][y]记录从(x,y)出发到终点路 径的最大权值和,一开始全部初始化为-1表示未被计算过。在计算Dfs(x,y) 时,首先查询F[x][y],如果F[x][y]不等于-1,说明Dfs(x,y)之前已经被计算过, 直接返回 F[x][y]即可,否则计算出Dfs(x,y)的值并存储在F[x][y]中。
w 最优化原理与无后效性
2、动态规划的无后效性原则。所谓无后效性原则,指的是这样一种 性质:某阶段的状态一旦确定,则此后过程的演变不再受此前各状态及 决策的影响。也就是说,“未来与过去无关”,当前的状态是此前历史 的一个完整的总结,此前的历史只能通过当前的状态去影响过程未来的 演变。在例题1最短路径问题中,问题被划分成各个阶段之后,阶段K中 的状态只能由阶段K+1中的状态通过状态转移方程得来,与其它状态没 有关系,特别与未发生的状态没有关系,例如从Ci到E的最短路径,只与 Ci的位置有关,它是由Di中的状态通过状态转移方程得来,与E状态,特 别是A到Ci的路径选择无关,这就是无后效性。
具体计算过程如下:
S1: K = 4 有 F4(D1)= 3, F4(D2)= 4, F4(D3)= 3;
信息学奥赛一本通-第3章--第3节-堆与应用(C++版)精选全文
void work() {
int i, x, y, ans = 0; cin >> n; for(i = 1 ; i <= n ; i++) {
cin >> x; h.push(x); }
//建堆
for(i = 1 ; i < n ; i++) {
x = h.top();h.pop(); y = h.top();h.pop(); ans += x + y; h.push(x + y); } cout << ans << endl; }
//大根堆
pop_heap(heap + 1, heap + heap_size + 1, greater<int>()); //小根堆
return heap[heap_size--];
}
五、堆的应用
▪ 例1、合并果子(fruit) 【问题描述】 在一个果园里,多多已经将所有的果子打了下来,而且按果子的 不同种类分成了不同的堆。多多决定把所有的果子合成一堆。 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于 两堆果子的重量之和。可以看出,所有的果子经过n-1次合并之后,就 只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗 体力之和。 因为还要花大力气把这些果子搬回家,所以多多在合并果子时要 尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数 和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费 的体力最少,并输出这个最小的体力耗费值。 例如有3种果子,数目依次为1,2,9。可以先将 1、2堆合并,新 堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得 到新的堆,数目为12,耗费体力为 12。所以多多总共耗费体力 =3+12=15。可以证明15为最小的体力耗费值。
