--
编号统计
/*没有思维难度,直接写,注意一些数据,sort不会用,就写个冒泡函数。ps:方法不唯一,但一定要把自己的代码调试ac(即正确答案)*/
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int a[300000];
int n,i,k,max1,u,t;
int main(){
scanf("%d",&t);
while(t--){
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);a[n]=-1;
sort(a,a+n);
u=a[0];k=1;max1=1;
for(i=0;i<n;i++)
{
if(a[i]==a[i+1]) {k++;}
else {
if(k>max1) {max1=k;u=a[i];}
k=1;
}
}
printf("%d\n",u);
}
return 0;
}
荷兰国旗问题
/*签到题*/
#include <iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
typedef long long LL;
int main()
{
LL t;
cin>>t;
while(t--){
string str;
cin>>str;
LL r=0,w=0,l=0;
for(LL i=0;i<str.size();i++)
if(str[i]=='R') r++;
else if(str[i]=='W') w++;
else if(str[i]=='B') l++;
for(LL i=0;i<r;i++) cout<<'R';
for(LL i=0;i<w;i++) cout<<'W';
for(LL i=0;i<l;i++) cout<<'B';
cout<<endl;
}
return 0;
}
国王的魔镜
/*模拟,前半部和后半部不对称就输出此时的长度,对称的话取一半长度继续判断直到不对称*/
#include <iostream>
#include<cstdio>
#include<string>
#include<cstring>
using namespace std;
typedef long long LL;
int main()
{
LL t;
cin>>t;
while(t--){
char str[1000];//string str;
//str.clear();
cin>>str;
LL len=strlen(str); // LL len=str.size();
while(len){
if(len%2){cout<<len<<endl;break;}
int i;
for(i=0;i<len/2;i++) if(str[i]!=str[len-i-1]) break;
if(i<len/2){cout<<len<<endl;break;}
else len/=2;
}
}
return 0;
}
素数
/*直接写,用第二种方法(当然第一种能过,但慢)*/
1.
#include<stdio.h>
#include<math.h>
int f(int x){
if(x<2) return 2;
int i;
for(i=2;i<sqrt(x);i++)
if(x%i==0) break;
if(i>sqrt(x)) return x;
else return 0;
}
int main(){
int n;
scanf("%d",&n);
while(n--){
int x,l,k;
scanf("%d",&x);
if(f(x)) printf("%d\n",f(x));
else{
for(int i=x;;i++)
if(f(i)) { k=i;break;}
for(int j=x;j>=2;j--)
if(f(j)) { l=j;break;}
if((x-l)<(k-x)) printf("%d\n",l);
else printf("%d\n",k);
}
}
return 0;
}
2.
#include <iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<iomanip>
using namespace std;
typedef long long LL;
const LL N=1100;
LL book[N],a[N],k;
void init(){
memset(book,0,sizeof(book));
k=0;
for(LL i=2;i<N;i++)
if(!book[i]){
for(LL j=i+i;j<N;j+=i)
if(!book[j]) book[j]=1;
a[k++]=i;
}
return ;
}
LL f(LL x,LL y,LL m){
if((y-m)<=(m-x)) return y;
return x;
}
int main()
{
int t;
cin>>t;
while(t--)
{
LL x;
cin>>x;
init();
if(x<a[0]) {cout<<a[0]<<endl;continue;}
for(LL i=0;i<k;i++)
if(x==a[i]){cout<<x<<endl;break;}
else if(x>a[i]&&x<a[i+1]){cout<<f(a[i],a[i+1],x)<<endl;;break;}
}
return 0;
}
数乌龟
/*数第八年的乌龟数时,第五年的乌龟都生了,原来的基数是上一年的数量,所以:a[i]=a[i-3]+a[i-1];*/
#include<stdio.h>
#include<string.h>
int a[60];
void init(){
a[1]=1,a[2]=2,a[3]=3;
for(int i=4;i<60;i++)
a[i]=a[i-3]+a[i-1];
}
int main(){
int n;
init();
while(scanf("%d",&n),n!=0){ printf("%d\n",a[n]);}
return 0;
}
精 挑 细 选
/*排序,用二维数组,每行存木块的信息,暴力进行三次冒泡排序就可得到答案。学习下sort函数,用第二种方法做。*/
1.
#include<stdio.h>
int main(){
int n;
scanf("%d",&n);
while(n--){
int a[1000][3],i,j,num;
scanf("%d",&num);
for(i=0;i<num;i++)
for(j=0;j<3;j++)
scanf("%d",&a[i][j]);
int temp,temp1,temp2;
for(i=0;i<num-1;i++)
for(j=0;j<num-1-i;j++)
if(a[j][0]<a[j+1][0])
{
temp=a[j][0];temp1=a[j][1];temp2=a[j][2];
a[j][0]=a[j+1][0];a[j][1]=a[j+1][1];a[j][2]=a[j+1][2];
a[j+1][0]=temp;a[j+1][1]=temp1;a[j+1][2]=temp2;
}
for(i=0;i<num-1;i++)
for(j=0;j<num-1-i;j++)
if(a[j][1]>a[j+1][1]&&a[j][0]==a[j+1][0])
{
temp=a[j][0];temp1=a[j][1];temp2=a[j][2];
a[j][0]=a[j+1][0];a[j][1]=a[j+1][1];a[j][2]=a[j+1][2];
a[j+1][0]=temp;a[j+1][1]=temp1;a[j+1][2]=temp2;
}
for(i=0;i<num-1;i++)
for(j=0;j<num-1-i;j++)
if(a[j][2]<a[j+1][2]&&a[j][0]==a[j+1][0]&&a[j][1]==a[j+1][1])
{
temp=a[j][0];temp1=a[j][1];temp2=a[j][2];
a[j][0]=a[j+1][0];a[j][1]=a[j+1][1];a[j][2]=a[j+1][2];
a[j+1][0]=temp;a[j+1][1]=temp1;a[j+1][2]=temp2;
}
printf("%d\n",a[0][2]);
}
return 0;
}
2.
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const LL N=1000005;
struct f{
LL l,m,r;
}a[N];
bool cmp(f p,f q)
{
if(p.l==q.l&&p.m==q.m) return p.r>q.r;
if(p.l==q.l) return p.m<q.m;
return p.l>q.l;
}
int main(){
LL t;
scanf("%lld",&t);
while(t--)
{
LL n;
cin>>n;
for(LL i=0;i<n;i++) cin>>a[i].l>>a[i].m>>a[i].r;
sort(a,a+n,cmp);
cout<<a[0].r<<endl;
}
return 0;
}
HEIHEI的心情
/*签到题*/
#include<stdio.h>
int main(){
char a[10];
int n;
scanf("%d",&n);
while(n--){
scanf("%s",a);
if(a[0]=='S'){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d\n",a+b+c);
}
else{
int d,e;
scanf("%d%d",&e,&d);
printf("%d\n",d+e);
}
}
return 0;
}
积木
/*从左到右依次尝试放木块,在能放下的情况,取最小高度*/
#include<stdio.h>
int h[21],w[21],b[21];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int m,l;
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%d%d",w+i,h+i);
b[i]=w[i];
}
scanf("%d",&l);
int minn=1000;
for(int i=0;i<m;i++)
{
if(h[i]>=minn) continue;
for(int j=i+1;j<m&&h[j]<=h[i];j++)
b[i]+=w[j];
for(int j=i-1;j>=0&&h[j]<=h[i];j--)
b[i]+=w[j];
if(b[i]>=l) minn=h[i];
}
printf("%d\n",minn+l);
}
return 0;
}
谁获得了最高奖学金
/*纯粹结构体的运用,无思维难度*/
#include<stdio.h>
#include<string.h>
struct f{
char str[30];
int x,y,z,sum;
char ch1,ch2;
}a[200];
int main(){
int t;
scanf("%d",&t);
while(t--){
memset(a,0,sizeof(a));
int n;
scanf("%d",&n);
int maxn=0,j=0,s=0;
for(int i=0;i<n;i++)
{
scanf("%s %d %d %c %c %d",a[i].str,&a[i].x,&a[i].y,&a[i].ch1,&a[i].ch2,&a[i].z);//注意输入格式,吃回车
if(a[i].x>80&&a[i].z>=1) a[i].sum+=8000;
if(a[i].x>85&&a[i].y>80) a[i].sum+=4000;
if(a[i].x>90) a[i].sum+=2000;
if(a[i].x>85&&a[i].ch2=='Y') a[i].sum+=1000;
if(a[i].y>80&&a[i].ch1=='Y') a[i].sum+=850;
s+=a[i].sum;
if(i==0||a[i].sum>maxn){maxn=a[i].sum;j=i;}
}
printf("%s\n%d\n%d\n",a[j].str,a[j].sum,s);
}
return 0;
}
~_~