参考答案...

--

编号统计
/*没有思维难度,直接写,注意一些数据,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;
}
~_~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值