州2010年试题
第一题 级数求和
http://47.114.110.127:8888/d/zhenti/p/1005
【题意】
已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。现给出一个整数K(1<=k<=15),要求计算出一个最小的n,使得Sn>K。
就是累加,退出条件是得Sn>K(反过来就是Sn<=K)
#include <iostream>
using namespace std;
int main()
{
int n=0,k;
double s=0.0;
cin>>k;
while(s<=k){
n++;
s+=1.0/n;
}
cout<<n;
}
小高考 http://47.114.110.127:8888/d/zhenti/p/1006
分支题目
注意所有数据都要测试
1、全A的情况 得5分
2、一个D的情况 poor……
其他得分的情况 都要测试
#include<bits/stdc++.h>//cout<<fixed<<setprecision(1)//48
using namespace std;
int main ()
{
//freopen("act.in","r",stdin);
//freopen("act.out","w",stdout);
int a[4],s,d,f,g=0;
cin>>a[0]>>a[1]>>a[2]>>a[3];
for(int i=0;i<=3;i++)
{
if(a[i]>=90)
g++;
if(a[i]<=59)
{
cout<<"Poor LanYangYang";
return 0;
}
}
if(g==4)
g++;
cout<<g;
}
约分
http://47.114.110.127:8888/d/zhenti/p/1007
本题其实考的就是最大公约数
写一个最大公约数函数即可、不写也行STl中有函数__gcd(a,b)
#include <iostream>
using namespace std;
int gcd(int a,int b){//最大公约数
if(a%b==0) return b;
gcd(b,a%b);
}
int main()
{
int a,b,t;
cin>>a>>b;
if(a%b==0) cout<<a/b;//能除尽
else if(a>b) cout<<a/b<<"+", t=gcd(a%b,b),cout<<a%b/t<<"/"<<b/t//若a/b结果为真分数,则输出一行,为a/b约分后的最简分数,形如c/d;
else if(a<b) t=gcd(a,b),cout<<a/t<<"/"<<b/t<<endl;//若a/b结果为假分数,则输出一行,为a/b约分后的最简带分数,形如c+d/e。
}
幸运数 http://47.114.110.127:8888/d/zhenti/p/1008
经典题目 分解质因数+素数判断
数据范围十万
1、会质因数的分解,这个过程其实和筛选法一个意思,首先分解反复2(这样2的倍数都被分解了),在反复分解3(这样3的倍数都被分解了)……
2、素数判断到sqrt的位置就可以了 (本题10万数据范围不大,不用筛选数据也能过)
经典:素数判断 i*i<=n和sqrt一样
bool pre(int n){
if(n==1) return false;
for(int i=2;i*i<=n;i++)
if(n%i==0) return false;
return true;
}
3 质因数分解代码:
== 短除法==
求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。
分解质因数的算式的叫短除法,和除法的性质差不多.
分解质因数代码:
将一个正整数分解质因数。例如:输入90,打印出90=233*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。 (2)如果n!=k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n, 重复执行第一步。 (3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
main()
{
int n,i;
printf("\n请输入一个数:\n");
scanf("%d",&n);
printf("%d=",n);
for(i=2;i<=n;i++)
while(n!=i)\\如果n!=k
{
if(n%i==0)\\但n能被k整除
{
printf("%d*",i);
n=n/i;
}
else
break;
}
printf("%d",n);
}
本题代码如下:
#include <bits/stdc++.h>
using namespace std;
int fenjie(int t){
int ans=0;
int n=t;
for(int i=2;i<=t;i++){
while(n%i==0){
ans++;
n/=i;
if(n==1) return ans;
}
}
}
bool pre(int n){
if(n==1) return false;
for(int i=2;i*i<=n;i++)
if(n%i==0) return false;
return true;
}
int main()
{
int n;
cin>>n;
for(int i=4;i<=n;i++){
if(pre(i)==true) continue;
if(pre(fenjie(i)))printf("%d\n",i);
}
}
字符串展开
http://47.114.110.127:8888/d/zhenti/p/1009
//思想代码
#include<iostream>
#include<string>
#define check1 (str[p-1]>='0'&&str[p-1]<='9'&&str[p+1]>='0'&&str[p+1]<='9')
#define check2 (str[p-1]>='a'&&str[p-1]<='z'&&str[p+1]>='a'&&str[p+1]<='z')
using namespace std;
int main()
{
string str,ans="";
getline(cin,str);
for(int p=0;p<str.size();p++)
if(str[p]=='-'&&(check1||check2)&&str[p-1]!=str[p+1]&&str[p-1]<str[p+1])
for(int i=str[p-1]+1;i<=str[p+1]-1;i++)
ans+=i;
else ans+=str[p];
cout<<ans<<endl;
}
//吕易航
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a;
cin>>a;
for(int i=0;i<a.size();i++)
{
if(a[i]=='-'&&a[i-1]<a[i+1]&&((a[i-1]>='0'&&a[i-1]<='9'&&a[i+1]>='0'&&a[i+1]<='9')||(a[i-1]>='a'&&a[i-1]<='z'&&a[i+1]>='a'&&a[i+1]<='z')||(a[i-1]>='A'&&a[i-1]<='Z'&&a[i+1]>='A'&&a[i+1]<='Z')))
{
for(int j=a[i-1]+1;j<=a[i+1]-1;j++)
cout<<char(j);
}
else
cout<<a[i];
}
}
平方后缀 http://47.114.110.127:8888/d/zhenti/p/1010
关注公众号
: