noi寒假刷题之旅_1.9编程基础之顺序查找(15题)
»1.9编程基础之顺序查找(15题)
01:查找特定的值
#include<iostream> using namespace std; int main() { int n; cin>>n; int *p=new int[n](); for(int i=0;i<n;++i) { cin>>p[i]; } int x,i; int flag=0; cin>>x; for(i=0;i<n;++i) { if(p[i]==x) { flag=1; break; } } if(flag) { cout<<i+1; } else { cout<<-1; } return 0; }
02:输出最高分数的学生姓名
#include<iostream> using namespace std; struct { string name; int score; }p[2]; int main() { int n; cin>>n; cin>>p[0].score>>p[0].name; for(int i=1;i<n;++i) { cin>>p[1].score>>p[1].name; if(p[1].score>p[0].score) { p[0].score=p[1].score; p[0].name=p[1].name; } } cout<<p[0].name; return 0; }
03:不高兴的津津
#include<iostream> using namespace std; struct { int n; int s; int sum; int id; }p[7]; int main() { int n; cin>>p[0].n>>p[0].s; p[0].sum=p[0].n+p[0].s; p[0].id=0; int sum,s; for(int i=1;i<7;++i) { cin>>n>>s; int sum=n+s; if(p[0].sum<sum) { p[0].sum=sum; p[0].s=s; p[0].n=n; p[0].id=i; } } if(p[0].sum<8) { cout<<0; } else { cout<<p[0].id+1; } return 0; }
04:谁拿了最多奖学金
#include<iostream> using namespace std; struct { string name; int ave; int cla; string yn; string westen; int essay; int money; }p[2]; int main() { int n;cin>>n; int i=0; int sum=0; cin>>p[i].name>>p[i].ave>>p[i].cla>>p[i].yn>>p[i].westen>>p[i].essay; if(p[i].ave>80&&p[i].essay>=1) p[i].money+=8000; if(p[i].ave>85&&p[i].cla>80) p[i].money+=4000; if(p[i].ave>90) p[i].money+=2000; if(p[i].ave>85&&p[i].westen=="Y") p[i].money+=1000; if(p[i].cla>80&&p[i].yn=="Y") p[i].money+=850; sum=p[0].money; for(i=1;i<n;++i) { cin>>p[1].name>>p[1].ave>>p[1].cla>>p[1].yn>>p[1].westen>>p[1].essay; p[1].money=0; if(p[1].ave>80&&p[1].essay>0) p[1].money+=8000; if(p[1].ave>85&&p[1].cla>80) p[1].money+=4000; if(p[1].ave>90) p[1].money+=2000; if(p[1].ave>85&&p[1].westen=="Y") p[1].money+=1000; if(p[1].cla>80&&p[1].yn=="Y") p[1].money+=850; sum+=p[1].money; if(p[0].money<p[1].money) { p[0].money=p[1].money; p[0].name=p[1].name; } } cout<<p[0].name<<endl<<p[0].money<<endl<<sum; return 0; }
05:最大值和最小值的差
#include<iostream> using namespace std; int main() { int m;cin>>m; int c,max,min; cin>>max; min=max; for(int i=1;i<m;++i) { cin>>c; if(c>max)max=c; if(c<min)min=c; } cout<<max-min; return 0; }
06:笨小猴[map]
#include<iostream> #include<map> using namespace std; int main() { map<char,int> m; string s; cin>>s; for(int i=0;i<s.length();++i) m[s[i]]++; int max,min; map<char,int>::iterator i=m.begin(); max=min=i->second; ++i; for(;i!=m.end();++i) { if(min>i->second) min=i->second; if(max<i->second) max=i->second; } int c=max-min; if(c==2||(c)%2==1&&c!=1) cout<<"Lucky Word"<<endl<<c; else cout<<"No Answer"<<endl<<0; return 0; }
07:不与最大数相同的数字之和
#include<iostream> using namespace std; struct { int a; int count; }p[2]; int main() { int n;cin>>n; cin>>p[0].a; p[0].count=1; int sum=p[0].a; for(int i=1;i<n;++i) { cin>>p[1].a; if(p[1].a>=p[0].a) { if(p[0].a==p[1].a) p[0].count++; else { p[0].a=p[1].a; p[0].count=1; } } sum+=p[1].a; } for(int i=0;i<p[0].count;++i)sum-=p[0].a; cout<<sum; return 0; }
08:白细胞计数
#include<iostream> #include<cmath> using namespace std; double p[301]; int main() { int n; cin>>n; double max=0.0,s,min=0.0; int a=0,b=0; double ave; cin>>p[0]; max=p[0]; min=p[0]; ave=p[0]; for(int i=1;i<n;++i) { cin>>p[i]; if(p[i]>max) { max=p[i];a=i; } if(p[i]<min) { min=p[i];b=i; } ave+=p[i]; } s=(ave-min-max)/(n-2); ave=0.0; for(int i=0;i<n;++i) { if(a==i||b==i)continue; if(fabs(s-p[i])>ave)ave = fabs(s-p[i]); } printf("%.2lf %.2lf",s,ave); return 0; }
09:直方图
#include<iostream> #include<cmath> using namespace std; int p[10500]; int main() { int n; int max,temp; cin>>n; cin>>p[0]; max=p[0]; for(int i=1;i<n;++i) { cin>>p[i]; if(p[i]>max) max=p[i]; } int *cot=new int[max+1](); for(int i=0;i<n;++i) cot[p[i]]++; for(int i=0;i<=max;++i) cout<<cot[i]<<endl; return 0; }
10:找最大数序列[这个双结构不错不错,值得学习]
#include <iostream> using namespace std; int main() { int n,index=0,temp,max=-1; cin>>n; int Max[40]={}; for(int i=1;i<=n;++i) { do { cin>>temp; if(temp>max) { max=temp; index=0; Max[index++]=i; } else if(temp==max&&Max[index-1]!=i) { Max[index++]=i; } }while(getchar()!='\n'); } cout<<max<<endl<<Max[0]; for(int i=1;i<index;++i)cout<<","<<Max[i]; }
11:连续出现的字符
#include<iostream> using namespace std; int main() { int n,count=0; string str; cin>>n>>str; char tag=str[0]; for(int i=0;i<str.length();++i) { if(str[i]==tag) { count++; if(count>=n) { cout<<tag; return 0; } } else { tag=str[i]; count=1; } } cout<<"No"<<endl; return 0; }
12:最长平台
#include<iostream> using namespace std; int main() { int n,count=1,tag,temp,max=1; cin>>n; cin>>tag; for(int i=1;i<n;++i) { cin>>temp; if(temp==tag) { ++count; if(count>max) max=count; } else { tag=temp; count=1; } } cout<<max; return 0; }
13:整数去重
#include<iostream> using namespace std; int p[20500]; int main() { int n,i; cin>>n; for(i=0;i<n;++i) { cin>>p[i]; for(int j=i-1;j>=0;--j) { if(p[j]==p[i]) { i--; n--; } } } for(int k=0;k<i;++k ) { if(k==0)cout<<p[k]; else cout<<" "<<p[k]; } return 0; }
14:铺地毯
#include<iostream> using namespace std; struct { int x,y; int w,h; }point[10050]; int main() { int n,i,a,b,re=-2; cin>>n; for(i=0;i<n;++i) cin>>point[i].x>>point[i].y>>point[i].w>>point[i].h; cin>>a>>b; for(int i=0;i<n;++i) if((point[i].x<=a&&a<=(point[i].x+point[i].w))&&(point[i].y<=b&&b<=(point[i].y+point[i].h)))re=i; cout<<re+1; return 0; }
15:接水问题【这是一个模拟题】
#include<iostream> #include<algorithm> using namespace std; #define MAX 11000 int stu[MAX]; int now[MAX]; int main() { int n,m; cin>>n>>m; for(int i=0;i<n;++i) cin>>stu[i]; for(int i=0;i<m;++i) now[i]=stu[i]; sort(now,now+m); for(int i=0;i<(n-m);++i) { now[0]+=stu[i+m]; sort(now,now+m); } cout<<now[m-1]; return 0; }
今天科比离开了我们。曼巴精神永存