PAT乙级考前总结(五)
字符串处理
1003 我要通过! (20 分)
“答案正确”是自动判题系统给出的最令人欢喜的回复。本题属于 PAT 的“答案正确”大派送 —— 只要读入的字符串满足下列条件,系统就输出“答案正确”,否则输出“答案错误”。
得到“答案正确”的条件是:
- 字符串中必须仅有 P、 A、 T这三种字符,不可以包含其它字符;
- 任意形如 xPATx 的字符串都可以获得“答案正确”,其中 x 或者是空字符串,或者是仅由字母 A 组成的字符串;
- 如果 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≤104);第 2 行给出 N 个正整数,即原始绳段的长度,数字间以空格分隔。所有整数都不超过104。
输出格式:
在一行中输出能够串成的绳子的最大长度。结果向下取整,即取为不超过最大长度的最近整数。
其实我不是很理解这样的做法,如果用数学证明这样的话,大概可以解释为用完所有材料才能得到最大,然后就是关于顺序的问题
#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;
}
PAT乙级考前总结(五)的更多相关文章
- PAT乙级考前总结(一)
数学相关的题目 1001 害死人不偿命的(3n+1)猜想 (15 分) 直接一步步计数 1005 继续(3n+1)猜想 (25 分) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目 ...
- PAT乙级考前总结(三)
特殊题型 1027 打印沙漏 (20 分) 题略,感觉有点像大学里考试的题.找规律即可. #include <stdio.h>#include <iostream>using ...
- PAT乙级考前总结(四)
散列相关问题 1029 旧键盘 (20 分) 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的那些键. 输入格式: ...
- PAT乙级考前总结(二)
简单模拟 1002 写出这个数 (20 分) 1006 换个格式输出整数 (15 分) 又是数数 1016 部分A+B (15 分) 相当于找数字 1018 锤子剪刀布 (20 分) 题目略 此处用了 ...
- PAT乙级完结有感
去年10月开始刷的题,拖拖拉拉的终于借这个假期刷完了,总的来说还是有点小激动的,毕竟,第一次刷完一个体系,在这之前,我在杭电.南阳.洛谷.leetcode.以及我们自己学校的OJ上刷过,但都没有完完整 ...
- PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数
PAT 乙级 1007. 素数对猜想 (20) c++ 筛选法求素数 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对于n>1有 dn 是偶数 ...
- C#版 - PAT乙级(Basic Level)真题 之 1021.个位数统计 - 题解
版权声明: 本文为博主Bravo Yeung(知乎UserName同名)的原创文章,欲转载请先私信获博主允许,转载时请附上网址 http://blog.csdn.net/lzuacm. C#版 - P ...
- PAT乙级真题及训练题 1025. 反转链表 (25)
PAT乙级真题及训练题 1025. 反转链表 (25) 感觉几个世纪没打代码了,真是坏习惯,调了两小时把反转链表调出来了,心情舒畅. 这道题的步骤 数据输入,数组纪录下一结点及储存值 创建链表并储存上 ...
- PAT 乙级 1024
题目 题目地址:PAT 乙级 1024 题解 模拟题,重点需要考虑到各种不同情况:简单来说一下: 因为输入格式固定,所以把不同的部分分别存储和处理可以在很大程度上简化运算:其中需要考虑最多的就是小数部 ...
随机推荐
- sqlparameters
1.数据访问层 using的用法: 01.可以using System;导命名控空间 02.using 的语法结构 using(变量类型 变量名 =new 变量类型()) { } 案例: 03.us ...
- 关于node_js的比较
node_js的比较是我自己初学遇到的第一个绕脑的事情. 在比较的函数多了之后,一些函数的调用和变量提升, 搞得自己头晕,有时候函数是没有返回值的,自己还在 用变量值去比较,实际上却是undefine ...
- 七、Linux的权限命令
1. 文件权限 r:对文件是指可读取内容 对目录是可以ls w:对文件是指可修改文件内容,对目录 是指可以在其中创建或删除子节点(目录或文件) x:对文件是指是否可以运行这个文件,对目录是指是否可以c ...
- C语言采用socket实现http post方式上传json数据
1.按照HTTP协议发送请求: http POST 报文格式 http 报文是面向文本的. 报文分为:请求报文和响应报文 请求报文由:请求行,请求头部,空行和请求数据四个部分组成. <1.请求行 ...
- CString与string、char*的区别和转换
转自:http://blog.csdn.net/luoweifu/article/details/20232379 我们在C++的开发中经常会碰到string.char*以及CString,这三种都表 ...
- 七月在线爬虫班学习笔记(六)——scrapy爬虫整体示例
第六课主要内容: 爬豆瓣文本例程 douban 图片例程 douban_imgs 1.爬豆瓣文本例程 douban 目录结构 douban --douban --spiders --__init__. ...
- Python_day1 Learning record
Python Day1 Learning record(python第一天学习记录) 一.ptyhon安装 windows .下载安装包 https://www.python.org/download ...
- 从零搭建Vue开发环境
参考: 1.node安装和环境配置:https://www.cnblogs.com/zhouyu2017/p/6485265.html: 2.babel的安装:https://www.cnblogs. ...
- css清除浮动方式总结
1.通过父元素overflow:hidden,缺点:超出部分隐藏,不推荐使用 <!DOCTYPE html> <html lang="en"> <he ...
- 获取input标签的值
取文本框值 AfterTiltle: $("[name='AfterTiltle']").val(), 取下拉列表值 AfterType: $("[name='After ...