我分到的是模4余0和余1的题目
L1-001
int main()
{
cout<<"Hello World!"<<endl;
return 0;
}
L1-004
int main()
{
int f; scanf("%d", &f);
printf("Celsius = %d\n", 5*(f-32)/9);
return 0;
}
L1-005. 考试座位号
每个PAT考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。
输入格式:
输入第一行给出一个正整数N(<=1000),随后N行,每行给出一个考生的信息:“准考证号 试机座位号 考试座位号”。其中准考证号由14位数字组成,座位从1到N编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。
考生信息之后,给出一个正整数M(<=N),随后一行中给出M个待查询的试机座位号码,以空格分隔。
输出格式:
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用1个空格分隔。
输入样例:4 10120150912233 2 4 10120150912119 4 1 10120150912126 1 3 10120150912002 3 2 2 3 4输出样例:
10120150912002 2 10120150912119 1
建立第二个数和第一个数的映射以及第二个数和第三个数的映射
const int maxn = 1010;
int mmap1[maxn];
string mmap2[maxn];
int main()
{
int n; scanf("%d", &n);
rep(i, n){
string s; int x, y;
cin>>s;scanf("%d%d", &x, &y);
mmap1[x] = y; mmap2[x] = s;
}
int m; scanf("%d", &m);
rep(i, m){
int x; scanf("%d", &x);
printf("%s %d\n", mmap2[x].c_str(), mmap1[x]);
}
return 0;
}
L1-008. 求整数段和
给定两个整数A和B,输出从A到B的所有整数以及这些数的和。
输入格式:
输入在一行中给出2个整数A和B,其中-100<=A<=B<=100,其间以空格分隔。
输出格式:
首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度,向右对齐。最后在一行中输出全部数字的和。
输入样例:-3 8输出样例:
-3 -2 -1 0 1 2 3 4 5 6 7 8 Sum = 30
int main()
{
int l,r; scanf("%d%d", &l, &r);
For(i, l, r){
printf("%5d", i);
if ((i-l) % 5 == 4) pn;
}
if ((r-l) % 5 != 4) pn;
printf("Sum = %d\n", (l+r) * (r-l+1) / 2);
return 0;
}
L1-009. N个数求和
本题的要求很简单,就是求N个数字的和。麻烦的是,这些数字是以有理数“分子/分母”的形式给出的,你输出的和也必须是有理数的形式。
输入格式:
输入第一行给出一个正整数N(<=100)。随后一行按格式“a1/b1 a2/b2 ...”给出N个有理数。题目保证所有分子和分母都在长整型范围内。另外,负数的符号一定出现在分子前面。
输出格式:
输出上述数字和的最简形式 —— 即将结果写成“整数部分 分数部分”,其中分数部分写成“分子/分母”,要求分子小于分母,且它们没有公因子。如果结果的整数部分为0,则只输出分数部分。
输入样例1:5 2/5 4/15 1/30 -2/60 8/3输出样例1:
3 1/3输入样例2:
2 4/3 2/3输出样例2:
2输入样例3:
3 1/3 -1/6 1/8输出样例3:
7/24
struct frac{
int up, down;
frac(int _up = 0, int _down = 0) : up(_up), down(_down){}
frac operator + (const frac& b){
frac tmp;
tmp.down = down * b.down;
tmp.up = up * b.down + down * b.up;
int gcd1 = gcd(abs(tmp.up), abs(tmp.down));
tmp.down /= gcd1; tmp.up /= gcd1;
return tmp;
}
};
这当中还要用到数论中的gcd
然后读入进行模拟,这题的输出要分5种情况
1、答案是0
2、分母是1
3、真分数
4、正假分数
5、负假分数
对于第五种情况,题面没有说清楚应该怎么输出,比如-11/3是输出-4+1/3还是-3-2/3呢?
这个经过探索,应该用第二种处理方式
int gcd(int a, int b){
return a % b == 0 ? b : gcd(b, a % b);
}
struct frac{
int up, down;
frac(int _up = 0, int _down = 0) : up(_up), down(_down){}
frac operator + (const frac& b){
frac tmp;
tmp.down = down * b.down;
tmp.up = up * b.down + down * b.up;
int gcd1 = gcd(abs(tmp.up), abs(tmp.down));
tmp.down /= gcd1; tmp.up /= gcd1;
return tmp;
}
};
frac a[1000];
int main(){
int n; scanf("%d", &n);
rep(i, n) scanf("%d/%d", &a[i].up, &a[i].down);
frac ans; ans = frac(0,1);
rep(i, n) ans = ans + a[i];
if (ans.up == 0) printf("0");
else if (ans.down == 1) printf("%d", ans.up);
else if (abs(ans.up) < ans.down) printf("%d/%d", ans.up, ans.down);
else if (ans.up > 0){
int z1 = ans.up / ans.down;
ans.up %= ans.down;
printf("%d %d/%d", z1, ans.up, ans.down);
}else{
ans.up = -ans.up;
int z1 = ans.up / ans.down;
ans.up %= ans.down;
printf("-%d %d/%d", z1, ans.up, ans.down);
}
return 0;
}
L1-012. 计算指数
真的没骗你,这道才是简单题 —— 对任意给定的不超过10的正整数n,要求你输出2n。不难吧?