温中暑期初中班练习之排序专题解题报告

1002&1008解题报告-by wl2018085

B:

思想很简单,就是读入一个字符串之后分成一个数列,然后再排序

可以从后往前把字符串给分割开(当然也可以从前往后)

先设个kik表示在数字数组里数字存到第k个,i表示现在在第几个字符

分割时注意判定连续的‘5’(否则数组中可能会出现多余的0)以及在字符串末的‘5’,从后往前分割可以不用判定字符串首的‘5’,因为我们要让数字数组的下标从0开始到k-1而不是k,到字符串首无论是不是‘5k都要++,当然从1k也是可以的

至于把字符转化成数字就不用强调了吧……

最好每次数据输入完都把数组清空一下(注意是多组数据)

下面附上AC代码:

 

#include<bits/stdc++.h>

using namespace std;

char C[1010];

int A[1010];

int main(){

         while(scanf("%s",&C)!=EOF){

                   int l=strlen(C),k=0,v=1;

                   memset(A,0,sizeof(A));

                   for(int i=l-1;i>=0;i--){

                            if(C[i]=='5'&&i!=l-1&&C[i+1]!='5'){

                                     v=1;k++;continue;

                            }else if(C[i]=='5'&&(i==l-1 or C[i+1]=='5')){

                                     v=1;continue;

                            }else if(C[i]!='5'&&i==0){

                                     A[k]=A[k]+v*(C[i]-'0');v=1;k++;continue;

                            }

                            A[k]=A[k]+v*(C[i]-'0');

                            v=v*10;

                   }

                   sort(A,A+k);

                   for(int i=0;i<k;i++){

                            if(i<k-1)printf("%d ",A[i]);

                            else if(i==k-1)printf("%d\n",A[i]);

                   }

         }

         return 0;

}

//这是我的做法,有别的做法也可以尝试,排序可以用sort也可以自己敲

H:插入和排序

这道题提示直接给你个get()函数来输入,如果不用这个用scanf的话会超时(我试过)

所以函数是肯定要抄上的

而且要注意数组大小:n是小于等于30000000的,稍微再开大点(想我就是少打了个0WA好多次的qwq

如果你的数组下标是0~n-1,那么k位置的数是A[k-1]

下标是1~n那就是A[k]

别的就没了

下面附上AC代码:

 

#include<bits/stdc++.h>

using namespace std;

int get(){

         int r=0;

         char c;

         while(c=getchar(),!(c>='0'&&c<='9'));

         r=c-'0';

         while(c=getchar(),c>='0'&&c<='9')

                   r=(r*10)+c-'0';

         return r;

}

int A[30000100];

int n;

int main(){

         n=get();

         for(int i=0;i<n;i++){

                   A[i]=get();

         }

         sort(A,A+n);

         int m,k;m=get();

         for(int i=0;i<m;i++){

                   k=get();

                   printf("%d\n",A[k-1]);

         }

         return 0;

}


为解题报告打分
暂时不评分

★★
★★★
★★★★
★★★★★
发表您的评论(若贴AC代码或发表禁止言论等违禁行为将被删除并扣除积分)

|返回 |   | 转到页头|
Copyright @ 2008-2024(浙ICP备2022001332号), TZOJ. All Rights Reserved.