PAT乙级考前总结(五)

字符串处理

1003 我要通过! (20 分)

答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。

得到答案正确”的条件是:

  1. 字符串中必须仅有 P A T这三种字符,不可以包含其它字符;
  2. 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
  3. 如果 aPbTc 是正确的,那么 aPbATca 也是正确的,其中 a b c 均或者是空字符串,或者是仅由字母 A 组成的字符串。

现在就请你为 PAT 写一个自动裁判程序,判定哪些字符串是可以获得“答案正确”的。

输入格式:

每个测试输入包含 1 个测试用例。第 1 行给出一个正整数 n (<10),是需要检测的字符串个数。接下来每个字符串占一行,字符串长度不超过 100,且不包含空格。

输出格式:

每个字符串的检测结果占一行,如果该字符串可以获得答案正确”,则输出 YES,否则输出 NO

#include <iostream>

#include <cstdio>

#include <cstring>

using namespace std;

int main()

{

int n;

scanf("%d",&n);

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

{

char s[100];

int flag=0,a=0,b=0,c=0,t=0;

scanf("%s",s);

int l=strlen(s);

for(int j=0;j<l;j++)//

{

    if(s[j]!='A'&&s[j]!='P'&&s[j]!='T')  t=1;//存在其他字符

if(s[j]=='P') flag=1;//存在P

if(s[j]=='T') flag=2;//存在T

if(t==0&&s[j]=='A')//存在A

{

if(flag==0) a++;//没遇到P之前的个数

if(flag==1) b++;//P与T之间的个数

if(flag==2) c++;//T之后的个数

}

}

if(flag==2&&t==0&&a*b==c&&b>0) cout<<"YES"<<endl;

else cout<<"NO"<<endl;

}

return 0;

}

1004 成绩排名 (20 分)1061 判断题 (15 分)

输入,储存,查找

1009 说反话 (20 分)

oj 上遇到过类似的题目,不过这里要只是调换单词顺序输出,单词本身还是不变

#include <stdio.h>

#include <string.h>

int main()

{

char s[88];

gets(s);

int l=strlen(s);

int t=l-1;

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

{

if(s[i]==' ')

{

for(int j=i+1;j<=t-1;j++) printf("%c",s[j]);

printf("%c ",s[t]);

t=i-1;

}

if(i==0) for(int j=0;j<=t;j++) printf("%c",s[j]);

}

return 0;

}

1014 福尔摩斯的约会 (20 分)

大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间星期四 14:04,因为前面两字符串中第 1 对相同的大写英文字母(大小写有区分)是第 4 个字母 D,代表星期四;第 2 对相同的字符是 E ,那是第 5 个英文字母,代表一天里的第 14 个钟头(于是一天的 0 点到 23 点由数字 0 到 9、以及大写字母 A 到 N 表示);后面两字符串第 1 对相同的英文字母 s 出现在第 4 个位置(从 0 开始计数)上,代表第 4 分钟。现给定两对字符串,请帮助福尔摩斯解码得到约会的时间。

输入格式:

输入在 4 行中分别给出 4 个非空、不包含空格、且长度不超过 60 的字符串。

输出格式:

在一行中输出约会的时间,格式为 DAY HH:MM,其中 DAY 是某星期的 3 字符缩写,即 MON 表示星期一,TUE 表示星期二,WED表示星期三,THU 表示星期四,FRI 表示星期五,SAT 表示星期六,SUN 表示星期日。题目输入保证每个测试存在唯一解。

就按照条件一步一步来,不需要什么奇技淫巧。。可能是我没想到吧

#include <cstdio>

using namespace std;

void print(int c)

{

switch (c)

{

case 0 :printf("MON ");return;

case 1 :printf("TUE ");return;

case 2 :printf("WED ");return;

case 3 :printf("THU ");return;

case 4 :printf("FRI ");return;

case 5 :printf("SAT ");return;

case 6 :printf("SUN ");return;

}

}

int main()

{

int s=0,ans[3];

char a1[61],a2[61],b1[61],b2[61];

scanf("%s %s %s %s",a1,a2,b1,b2);

for(int i=0;;i++)

{

if(a1[i]==a2[i])

{

if(s==0)

{

if(a1[i]<='G'&&a1[i]>='A')

{

s=1;

ans[0]=a1[i]-'A';

}

}else

{

if(a1[i]>='0'&&a1[i]<='9')

{

ans[1]=a1[i]-'0';break;

}else if(a1[i]>='A'&&a1[i]<='N')

{

ans[1]=a1[i]-'A'+10;break;

}

}

}

}

for(int i=0;;i++)

{

if(b1[i]==b2[i])

{

if((b1[i]>='A'&&b1[i]<='Z')||(b1[i]>='a'&&b1[i]<='z'))

{

ans[2]=i;

break;

}

}

}

print(ans[0]);

printf("%02d:%02d",ans[1],ans[2]);

return 0;

}

1021 个位数统计 (15 分)1057 数零壹 (20 分)

似乎就是字符串统计吧

1024 科学计数法 (20 分)

科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指数部分的正负号即使对正数也必定明确给出。

现以科学计数法的格式给出实数 A,请编写程序按普通数字表示法输出 A,并保证所有有效位都被保留。

输入格式:

每个输入包含 1 个测试用例,即一个以科学计数法表示的实数 A。该数字的存储长度不超过 9999 字节,且其指数的绝对值不超过 9999。

输出格式:

对每个测试用例,在一行中按普通数字表示法输出 A,并保证所有有效位都被保留,包括末尾的 0。

比较繁琐的操作,而且我发现自己似乎对科学计数法的定义记错了。。

#include <stdio.h>

using namespace std;

int main()

{

char b[10010];

int i=0,dian=0,e,end;

for(i=0;;++i)//依次输入(我忘了当时为什么非要这样输入了)

{

b[i]=getchar();

if(b[i]=='.') dian=i;//记下小数点的位置

if(b[i]=='E') e=i;//记下分割位置

if(b[i]=='\n')

{

end=i;break;

}

}

if(dian==0) dian=e-1;//没有小数点的情况

if(b[0]=='-') printf("%c",b[0]);//是负数先把负号输出

int zhi=0,t=1;

for(i=end-1;i>=e+2;i--)//计算指数大小

{

zhi+=t*(b[i]-'0');

t*=10;

}

if(zhi==0)//指数为0,直接输出前部分

{

for(i=1;i<e;i++) printf("%c",b[i]);

}

if(b[e+1]=='+')//指数为正时,其实根据科学计数法的定义便知道是形如 x .xxx型的,当时想多了

{

dian+=zhi;//移动小数点

for(i=1;i<=e-1;i++)

{

if(b[i]=='.') continue;//跳过数组中的小数点

printf("%c",b[i]);//小数点外的直接输出

if(i==dian&&i!=e-1) printf(".");//在移动后的位置输出小数点,若是最后一位就不用输出

}

if(dian>=e-1)//超出了原来的长度要补 0  

{

for(i=e;i<=dian;i++) printf("0");

}

}else//指数为负

{

printf("0.");//根据定义,其实就知道只要移动就会是0.xxx

for(i=1;i<zhi;i++) printf("0");//多加的 0

printf("%c",b[1]);//输出以前小数点前的一位

for(i=3;i<=e-1;i++) printf("%c",b[i]);//其他数字

}

return 0;

}

1031 查验身份证 (15 分)

常规操作,不过对于字符串,还是能用string就用了,有很多操作都很有用

???刚看到有老师补充数据,然后我又提交了居然最后一个点没过。。尴尬了。。一时想不出来,应该是某个细节,,好坑。

1044 火星数字 (20 分)

火星人是以 13 进制计数的:

  • 地球人的 0 被火星人称为 tret。
  • 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, jun, jly, aug, sep, oct, nov, dec。
  • 火星人将进位以后的 12 个高位数字分别称为:tam, hel, maa, huh, tou, kes, hei, elo, syy, lok, mer, jou。

例如地球人的数字 29 翻译成火星文就是 hel mar;而火星文 elo nov 对应地球数字 115。为了方便交流,请你编写程序实现地球和火星数字之间的互译。

输入格式:

输入第一行给出一个正整数 N<100),随后 N 行,每行给出一个 [0, 169) 区间内的数字 —— 或者是地球文,或者是火星文。

输出格式:

对应输入的每一行,在一行中输出翻译后的另一种语言的数字。

刚开始没有什么头绪,现在复习时在做用了string就方便多啦,还有注意输出格式,当为13的倍数时,火星数字只输出高位。另外还可以用map,打表,反正数不多,直接查询即可。

#include <iostream>

#include <string.h>

using namespace std;

string low[13]={"tret","jan","feb","mar","apr","may","jun","jly","aug","sep","oct","nov","dec"};

string high[13]={"00","tam","hel","maa","huh","tou","kes","hei","elo","syy","lok","mer","jou"};

string ss;

void print1()//地球数到13进制到火星数

{

int s=0;

for(int i=0;i<ss.size();i++)

{

s*=10;s+=ss[i]-'0';

}

if(s>=13)

{

cout<<high[s/13];

s%=13;

if(s>0) cout<<' '<<low[s];

cout<<endl;

}else cout<<low[s]<<endl;

}

void print2()//火星数到10进制地球数

{

int s=0;

for(int i=0;i<13;i++)

{

if(low[i]==ss.substr(0,3))

{

s+=i;break;

}else if(high[i]==ss.substr(0,3))

{

s+=13*i;break;

}

}

if(ss.size()>4)

{

for(int i=0;i<13;i++)

{

if(low[i]==ss.substr(4,7))

{

s+=i;break;

}

}

}

cout<<s<<endl;

}

int main()

{

int n;

cin>>n;getchar();

while(n--)

{

getline(cin,ss);

if(ss[0]<='9'&&ss[0]>=0) print1();

else print2();

}

return 0;

}

1048 数字加密 (20 分)

本题要求实现一种数字加密方法。首先固定一个加密用正整数 A,对任一正整数 B,将其每 1 位数字与 A 的对应位置上的数字进行以下运算:对奇数位,对应位的数字相加后对 13 取余——这里用 J 代表 10、Q 代表 11、K 代表 12;对偶数位,用 B 的数字减去 A 的数字,若结果为负数,则再加 10。这里令个位为第 1 位。

输入格式:

输入在一行中依次给出 A 和 B,均为不超过 100 位的正整数,其间以空格分隔。

输出格式:

在一行中输出加密后的结果。

第一次做的时候感觉莫名其妙老是不对,后来又参考了书上的修改了

#include <iostream>

#include <cstring>

#include <algorithm>

using namespace std;

int main()

{

char a[101],b[101],c[101]={0};

cin>>a>>b;

int l=strlen(a),L=strlen(b);

reverse(a,a+l);reverse(b,b+L);//从个位算起,所以先反转

int lm=l>L?l:L,t;

for(int k=0;k<lm;k++)

{

int na=k<l?(a[k]-'0'):0;//超出的部分按0算

int nb=k<L?(b[k]-'0'):0;

if(k%2==0)//数组是从0开始的,所以是奇数

{

t=nb+na;

t%=13;

if(t<10) c[k]=t+'0';

else

{

if(t==10) c[k]='J';

if(t==11) c[k]='Q';

if(t==12) c[k]='K';

}

}else//偶数位

{

t=nb-na;

if(t<0) t+=10;

c[k]=t+'0';

}

}

reverse(c,c+lm);//反转

cout<<c;

return 0;

}

1052 卖个萌 (20 分)

萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见,我们假设一个表情符号是按下列格式输出的:

[左手]([左眼][口][右眼])[右手]

现给出可选用的符号集合,请你按用户的要求输出表情。

输入格式:

输入首先在前三行顺序对应给出手、眼、口的可选符号集。每个符号括在一对方括号 []内。题目保证每个集合都至少有一个符号,并不超过 10 个符号;每个符号包含 1 到 4 个非空字符。

之后一行给出一个正整数 K,为用户请求的个数。随后 K 行,每行给出一个用户的符号选择,顺序为左手、左眼、口、右眼、右手——这里只给出符号在相应集合中的序号(从 1 开始),数字间以空格分隔。

输出格式:

对每个用户请求,在一行中输出生成的表情。若用户选择的序号不存在,则输出 Are you kidding me? @\/@

刚开始无从下手,还是用了string,果然方便了,另外输出的符号里有 \,转义字符,因此要写成 \\不然就错了

#include <iostream>

#include <vector>

using namespace std;

vector<string> hand,eye,mouth;

int main()

{

string ss;

int left=0;

//输入并记录

getline(cin,ss);

for(int i=0;i<ss.size();i++)

{

if(ss[i]=='[') left=i+1;

if(ss[i]==']')

{

hand.push_back(ss.substr(left,i-left));

}

}

getline(cin,ss);

for(int i=0;i<ss.size();i++)

{

if(ss[i]=='[') left=i+1;

if(ss[i]==']')

{

eye.push_back(ss.substr(left,i-left));

}

}

getline(cin,ss);

for(int i=0;i<ss.size();i++)

{

if(ss[i]=='[') left=i+1;

if(ss[i]==']')

{

mouth.push_back(ss.substr(left,i-left));

}

}

int k;

cin>>k;

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

{

int m;string str="";bool flag=true;

cin>>m;if(m-1<hand.size()) str+=hand[m-1];else flag=false;

str+="(";

cin>>m;if(m-1<eye.size()) str+=eye[m-1];else flag=false;

cin>>m;if(m-1<mouth.size()) str+=mouth[m-1];else flag=false;

cin>>m;if(m-1<eye.size()) str+=eye[m-1];else flag=false;

str+=")";

cin>>m;if(m-1<hand.size()) str+=hand[m-1];else flag=false;

if(flag) cout<<str<<endl;else

cout<<"Are you kidding me? @\\/@"<<endl;

}

return 0;

}

1056 组合数的和 (15 分)
1054 求平均值 (20 分)

本题的基本要求非常简单:给定 N 个实数,计算它们的平均值。但复杂的是有些输入数据可能是非法的。一个“合法”的输入是 [−1000,1000] 区间内的实数,并且最多精确到小数点后 2 位。当你计算平均值的时候,不能把那些非法的数据算在内。

输入格式:

输入第一行给出正整数 N≤100)。随后一行给出 N 个实数,数字间以一个空格分隔。

输出格式:

对每个非法输入,在一行中输出 ERROR: X is not a legal number,其中 X 是输入。最后在一行中输出结果:The average of K numbers is Y,其中 K 是合法输入的个数,Y 是它们的平均值,精确到小数点后 2 位。如果平均值无法计算,则用 Undefined 替换 Y。如果 K 为 1,则输出 The average of 1 number is Y

用了sscanf,sprintf这一招,其实只要转换成数字判断与字符是否一样就可以排除大部分情况。

#include <stdio.h>

#include <string.h>

using namespace std;

bool judge(char * a)

{

    double temp;

    char b[101];

    sscanf(a,"%lf",&temp);//将a字符串转换为格式lf存到temp里

sprintf(b, "%.2lf",temp);//将格式化的temp写入字符串b

int flag = 0;

for(int j=0;j<strlen(a);j++)//判断新的字符串跟原来的是不是相等的

{

if(a[j]!=b[j])

flag = 1;

}

if(flag||temp<-1000||temp>1000)//如果flag = 1表示不相等有问题

return false;

else return true;

}

int main()

{

  int n,k=0;

  double s=0,x;

  char str[101];

  scanf("%d",&n);

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

  {

    scanf("%s",str);

    if(judge(str))

{

sscanf(str,"%lf",&x);

s+=x;k++;

}

    else printf("ERROR: %s is not a legal number\n",str);

  }

  if(k>1)

  printf("The average of %d numbers is %.2f",k,s/k);

  else if(k==1)

  printf("The average of 1 number is %.2f",s);

  else printf("The average of 0 numbers is Undefined");

  return 0;

}

1078 字符串压缩与解压 (20 分)

#include <stdio.h>

#include <string.h>

char str[1008];

void press()

{

gets(str);

int l=strlen(str),s=1;

for(int i=1;i<l;i++)

{

if(str[i]==str[i-1])

{

s++;

}else

{

if(s>1) printf("%d",s);

printf("%c",str[i-1]);

s=1;

}

if(i==l-1)

{

if(s>1) printf("%d",s);

printf("%c",str[i]);

}

}

}

void repre()

{

gets(str);

int l=strlen(str),s=0;

for(int i=0;i<l;i++)

{

if(str[i]>='0'&&str[i]<='9')

{

s*=10;s+=str[i]-'0';

}else

{

for(int j=0;j<s;j++) printf("%c",str[i]);

if(s==0) printf("%c",str[i]);

s=0;

}

}

}

int main()

{

  char x;

  scanf("%c",&x);

  getchar();

  if(x=='C') press();

  if(x=='D') repre();

}

1081 检查密码 (15 分)
1088 三人行 (20 分)

子曰:“三人行,必有我师焉。择其善者而从之,其不善者而改之。”

本题给定甲、乙、丙三个人的能力值关系为:甲的能力值确定是 2 位正整数;把甲的能力值的 2 个数字调换位置就是乙的能力值;甲乙两人能力差是丙的能力值的 X 倍;乙的能力值是丙的 Y 倍。请你指出谁比你强应“从之”,谁比你弱应“改之”。

输入格式:

输入在一行中给出三个数,依次为:M(你自己的能力值)、X 和 Y。三个数字均为不超过 1000 的正整数。

输出格式:

在一行中首先输出甲的能力值,随后依次输出甲、乙、丙三人与你的关系:如果其比你强,输出 Cong;平等则输出 Ping;比你弱则输出 Gai。其间以 1 个空格分隔,行首尾不得有多余空格。

注意:如果解不唯一,则以甲的最大解为准进行判断;如果解不存在,则输出 No Solution

#include <iostream>

#include <math.h>

using namespace std;

void print(double a,int m)

{

if(m<a) cout<<"Cong";

else if(m==a) cout<<"Ping";

else cout<<"Gai";

}

int main() {

    int m,x,y;

    cin>>m>>x>>y;

    int a,b;

    for(a=99;a>=10;a--)

    {

     b=a/10+10*(a%10);

    double c=1.0*abs(a-b)/x;

     if(b==y*c)

{

cout<<a<<' ';

print(a,m);cout<<' ';

print(b,m);cout<<' ';

print(c,m);return 0;

}

}

cout<<"No Solution";

    return 0;

}

1058 选择题 (20 分)

批改多选题是比较麻烦的事情,本题就请你写个程序帮助老师批改多选题,并且指出哪道题错的人最多。

输入格式:

输入在第一行给出两个正整数 N(≤ 1000)和 M(≤ 100),分别是学生人数和多选题的个数。随后 M 行,每行顺次给出一道题的满分值(不超过 5 的正整数)、选项个数(不少于 2 且不超过 5 的正整数)、正确选项个数(不超过选项个数的正整数)、所有正确选项。注意每题的选项从小写英文字母 a 开始顺次排列。各项间以 1 个空格分隔。最后 N 行,每行给出一个学生的答题情况,其每题答案格式为 (选中的选项个数 选项1 ……),按题目顺序给出。注意:题目保证学生的答题情况是合法的,即不存在选中的选项数超过实际选项数的情况。

输出格式:

按照输入的顺序给出每个学生的得分,每个分数占一行。注意判题时只有选择全部正确才能得到该题的分数。最后一行输出错得最多的题目的错误次数和编号(题目按照输入的顺序从 1 开始编号)。如果有并列,则按编号递增顺序输出。数字间用空格分隔,行首尾不得有多余空格。如果所有题目都没有人错,则在最后一行输出 Too simple

感觉莫名其妙,用string储存并比较,却第一个点过不去,另外将例子复制粘贴后运行错误抛出,一时没检查出哪里有问题

1073 多选题常见计分法 (20 分)

批改多选题是比较麻烦的事情,有很多不同的计分方法。有一种最常见的计分方法是:如果考生选择了部分正确选项,并且没有选择任何错误选项,则得到 50% 分数;如果考生选择了任何一个错误的选项,则不能得分。本题就请你写个程序帮助老师批改多选题,并且指出哪道题的哪个选项错的人最多。

输入格式:

输入在第一行给出两个正整数 N(≤1000)和 M(≤100),分别是学生人数和多选题的个数。随后 M 行,每行顺次给出一道题的满分值(不超过 5 的正整数)、选项个数(不少于 2 且不超过 5 的正整数)、正确选项个数(不超过选项个数的正整数)、所有正确选项。注意每题的选项从小写英文字母 a 开始顺次排列。各项间以 1 个空格分隔。最后 N 行,每行给出一个学生的答题情况,其每题答案格式为 (选中的选项个数 选项1 ……),按题目顺序给出。注意:题目保证学生的答题情况是合法的,即不存在选中的选项数超过实际选项数的情况。

输出格式:

按照输入的顺序给出每个学生的得分,每个分数占一行,输出小数点后 1 位。最后输出错得最多的题目选项的信息,格式为:错误次数 题目编号(题目按照输入的顺序从1开始编号)-选项号。如果有并列,则每行一个选项,按题目编号递增顺序输出;再并列则按选项号递增顺序输出。行首尾不得有多余空格。如果所有题目都没有人错,则在最后一行输出 Too simple

感觉比上一题更复杂了,暂时放这。

1069 微博转发抽奖 (20 分)

小明 PAT 考了满分,高兴之余决定发起微博转发抽奖活动,从转发的网友中按顺序每隔 N 个人就发出一个红包。请你编写程序帮助他确定中奖名单。

输入格式:

输入第一行给出三个正整数 M(≤ 1000)、N 和 S,分别是转发的总量、小明决定的中奖间隔、以及第一位中奖者的序号(编号从 1 开始)。随后 M 行,顺序给出转发微博的网友的昵称(不超过 20 个字符、不包含空格回车的非空字符串)。

注意:可能有人转发多次,但不能中奖多次。所以如果处于当前中奖位置的网友已经中过奖,则跳过他顺次取下一位。

输出格式:

按照输入的顺序输出中奖名单,每个昵称占一行。如果没有人中奖,则输出 Keep going...

先是列出不连续重复的名字序列,然后从开头来循环,步长为N,同时遇到已经得奖的就跳过顺到下一位,然后再继续。

#include<iostream>

#include<string>

#include<map>

using namespace std;

int main() {

map<string,int> map; //map用于判断改昵称是否已经获奖

int n,m,s;

int count=0;

cin>>m>>n>>s;

string name[1001],str;

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

cin>>str;

if(i==0||str!=name[count-1])//与前面进行的比较,去重

name[count++] = str;

}

if(m<s)

cout<<"Keep going..."<<endl;

else

for(int i=s-1;i<m;i+=n){

while(map[name[i]]!=0)//如果一个人已经获奖,就要“一直”往下找

i++;

cout<<name[i]<<endl;

map[name[i]]++;

}

return 0;

}

 

1070 结绳 (25 分)

给定一段一段的绳子,你需要把它们串成一条绳。每次串连的时候,是把两段绳子对折,再如下图所示套接在一起。这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连。每次串连后,原来两段绳子的长度就会减半。

 

给定 N 段绳子的长度,你需要找出它们能串成的绳子的最大长度。

输入格式:

每个输入包含 1 个测试用例。每个测试用例第 1 行给出正整数 N (2≤N≤10​4​​);第 2 行给出 N 个正整数,即原始绳段的长度,数字间以空格分隔。所有整数都不超过10​4​​

输出格式:

在一行中输出能够串成的绳子的最大长度。结果向下取整,即取为不超过最大长度的最近整数。

其实我不是很理解这样的做法,如果用数学证明这样的话,大概可以解释为用完所有材料才能得到最大,然后就是关于顺序的问题

#include <stdio.h>

#include <algorithm>

using namespace std;

int rope[10010]={0};

int main()

{

int n,s;

scanf("%d",&n);

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

{

scanf("%d",&rope[i]);

}

sort(rope,rope+n);

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

{

if(i>0)

{

s=(rope[i]+rope[i-1])/2;

rope[i]=s;

}

}

printf("%d",s);

return 0;

}

猜你喜欢

转载自www.cnblogs.com/fremontxutheultimate/p/10089248.html
今日推荐