L1-002 打印沙漏 (20 分)
本题要求你写个程序把给定的符号打印成沙漏的形状。例如给定17个“*”,要求按下列格式打印
*****
***
*
***
*****
所谓“沙漏形状”,是指每行输出奇数个符号;各行符号中心对齐;相邻两行符号数差2;符号数先从大到小顺序递减到1,再从小到大顺序递增;首尾符号数相等。
给定任意N个符号,不一定能正好组成一个沙漏。要求打印出的沙漏能用掉尽可能多的符号。
输入格式:
输入在一行给出1个正整数N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
输入样例:
19 *
输出样例:
*****
***
*
***
*****
自己写的代码
#include<iostream>
using namespace std;
void func(int n, char f)
{
//计算
int bj=1,i=1,b=0,sl=0;//标记,sl数量
while (bj)
{
b = (2 * i - 1) * 2 ;
if (i == 1) b--;
sl = sl + b;
if (n < sl)
{
i--;
sl -= b;
bj = 0;
break;
}
i++;
}
//输出
for (int a=0; a < i; a++)
{
int c;
for (c = 0; c < a; c++)//输出空格
cout << " ";
for (c = 0; c < ((i - a) * 2 - 1); c++)
cout << f;
for (c = 0; c < a; c++)//输出空格
cout << " ";
cout << "\n";
}
for (int a=i-1; a >0; a--)
{
int c;
for (c = 0; c < a - 1; c++)//输出空格
cout << " ";
for (c = 0; c < ((i - a) * 2 - 1)+2; c++)
cout << f;
for (c = 0; c < a-1; c++)//输出空格
cout << " ";
cout << "\n";
}
n = n-sl;
cout << n << "\n";
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
int n; char f;
cin >> n >> f;
func(n, f);
return 0;
}
结果
0 格式错误 3 ms 384 KB
1 答案正确 3 ms 508 KB
2 答案正确 3 ms 376 KB
3 格式错误 3 ms 384 KB
L1-003 个位数统计 (15 分)
给定一个 k 位整数
> N=d k−1 10 k−1 +⋯+d 1 10 1 +d 0 (0≤d i ≤9, i=0,⋯,k−1, d k−1 >0),
请编写程序统计每种不同的个位数字出现的次数。例如:给定 N=100311,则有 2 个 0,3 个 1,和 1 个 3。
输入格式:
每个输入包含 1 个测试用例,即一个不超过 1000 位的正整数 N。
输出格式:
对 N 中每一种不同的个位数字,以 D:M 的格式在一行中输出该位数字 D 及其在 N 中出现的次数 M。要求按 D 的升序输出。
输入样例:
100311
输出样例:
0:2 1:3 3:1
自己写的代码
#include<iostream>
using namespace std;
int n[10];
void func(int n, char f)
{
}
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
char a;
while (cin >> a)
{
switch (a)
{
case '0':n[0]++;
break;
case '5':n[5]++;
break;
case '1':n[1]++;
break;
case '2':n[2]++;
break;
case '3':n[3]++;
break;
case '4':n[4]++;
break;
case '6':n[6]++;
break;
case '7':n[7]++;
break;
case '8':n[8]++;
break;
case '9':n[9]++;
break;
default:break;
}
}
for (int i = 0; i < 10; i++)
{
if (n[i] != 0)
cout << i << ":" << n[i] << "\n";
}
}
L1-005 考试座位号 (15 分)
每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生的考试座位号码,考试时考生需要换到考试座位就座。但有些考生迟到了,试机已经结束,他们只能拿着领到的试机座位号码求助于你,从后台查出他们的考试座位号码。
输入格式:
输入第一行给出一个正整数 N(≤1000),随后 N 行,每行给出一个考生的信息:准考证号 试机座位号 考试座位号。其中准考证号由 16 位数字组成,座位从 1 到 N 编号。输入保证每个人的准考证号都不同,并且任何时候都不会把两个人分配到同一个座位上。
考生信息之后,给出一个正整数 M(≤N),随后一行中给出 M 个待查询的试机座位号码,以空格分隔。
输出格式:
对应每个需要查询的试机座位号码,在一行中输出对应考生的准考证号和考试座位号码,中间用 1 个空格分隔。
输入样例:
4
3310120150912233 2 4
3310120150912119 4 1
3310120150912126 1 3
3310120150912002 3 2
2
3 4
输出样例:
3310120150912002 2
3310120150912119 1
#include<iostream>
using namespace std;
struct student
{
char id[17];
int sjzwh, kszwh;//试机座位号,考试座位号
};
student stu[1002];
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
int n, c, temp;
cin >> n;
for (int i = 0; i < n; i++)//输入信息
cin >> stu[i].id >> stu[i].sjzwh >> stu[i].kszwh;
cin >> c;//输入查询人数
for (int i = 0; i < c; i++)
{
cin >> temp;//输入查询的座位号
for (int i = 0; i < n; i++)//遍历查找
{
if (stu[i].sjzwh == temp)
{
cout << stu[i].id << " " << stu[i].kszwh << "\n";
break;
}
}
}
return 0;
}
L1-007 念数字 (10 分)
输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:
0: ling 1: yi 2: er 3: san 4: si 5: wu 6: liu 7: qi 8: ba 9: jiu
输入格式:
输入在一行中给出一个整数,如:1234。
提示:整数包括负数、零和正数。
输出格式:
在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如 yi er san si。
输入样例:
-600
输出样例:
fu liu ling ling
#include<iostream>
using namespace std;
int main()
{
std::ios::sync_with_stdio(false);
std::cin.tie(0);
char num[10000];
cin >> num;
int i = 0;
while (num[i] != NULL)
{
if (i == 0)
{
switch (num[i])
{
case '-':cout << "fu"; break;
case '1':cout << "yi"; break;
case '2':cout << "er"; break;
case '3':cout << "san"; break;
case '4':cout << "si"; break;
case '5':cout << "wu"; break;
case '6':cout << "liu"; break;
case '7':cout << "qi"; break;
case '8':cout << "ba"; break;
case '9':cout << "jiu"; break;
case '0':cout << "ling"; break;
default:break;
}
}
else
{
switch (num[i])
{
case '-':cout << " fu"; break;
case '1':cout << " yi"; break;
case '2':cout << " er"; break;
case '3':cout << " san"; break;
case '4':cout << " si"; break;
case '5':cout << " wu"; break;
case '6':cout << " liu"; break;
case '7':cout << " qi"; break;
case '8':cout << " ba"; break;
case '9':cout << " jiu"; break;
case '0':cout << " ling"; break;
default:break;
}
}
i++;
}
cout << "\n";
return 0;
}