团体程序设计天梯赛-L1组

团体程序设计天梯赛-L1组

--------------------------------------------------------------------------------

题目传送门

团体程序设计天梯赛-L1组
--------------------------------------------------------------------------------
更多详见>>

OJ题解系列 目录导航帖
--------------------------------------------------------------------------------

这里是团体程序设计天梯赛-L1组
团体程序设计天梯赛,简称CCCC竞赛,从总体上来看,该竞赛难度不大,掌握基础的数据结构和算法便能够取得不错的分数,L1/L2/L3按照难度递增的顺序排列,其中L1是入门级的难度,类似于PAT乙级考试前3题,占100分;L2级加入了数据结构的元素,难度和PAT乙级后2题/PAT甲级前3题难度相当,占75分,L3级加入了算法进阶的内容,难度和PAT甲级最后一题/PAT顶级的难度一致,占75分。因此,练习的时候也可参考PAT专题部分,具体内容详见OJ题解系列 目录导航帖

接下来就是题解部分了,每道算法题都标注有对应的算法标签,对于那些易错、较难或是测试点比较特殊的题目会着重标注,本章推荐的题目有:

L1-039 古风排版 (20 分)
L1-064 估值一亿的AI核心代码 (20 分)
字符串
L1-046 整除光棍 (20 分) 数论

--------------------------------------------------------------------------------

L1-001 Hello World (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	cout << "Hello World!" << endl;
	
	return 0;
} 

L1-002 打印沙漏 (20 分)

算法标签: 模拟 + 字符串
注意: 先计算最大的打印行数,这个数比较容易计算,根据高斯公式列出表达式 n ∗ ( n − 1 ) 2 ∗ 2 − 1 < = N \frac{n*(n-1)}{2}*2-1<=N 2n(n1)21<=N,n即为打印行数,然后按照普通的打印方法将其输出即可!

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N;
	char c;
	cin >> N >> c;
	double n = sqrt((1+N)*1.0/2.0);
	int maxn = int(n);
	int rest = N -(2*maxn*maxn-1);
	
	for(int i=n;i>0;i--){
    
    
		for(int j=0;j<(2*maxn-2*i)/2;j++){
    
    
			printf(" ");
		}
		for(int j=0;j<2*i-1;j++){
    
    
			printf("%c",c);
		}
		printf("\n");
	} 
	for(int i=2;i<=n;i++){
    
    
		for(int j=0;j<(2*maxn-2*i)/2;j++){
    
    
			printf(" ");
		}
		for(int j=0;j<2*i-1;j++){
    
    
			printf("%c",c);
		}
		printf("\n");
	}
	cout << rest << endl;
	return 0;
}

L1-003 个位数统计 (15 分)

算法标签: 模拟
注意: 输出0

#include<bits/stdc++.h>
using namespace std;
int a[15];
int main(){
    
    
	string s;
	cin >> s;
	for(int i=0;i<s.size();i++){
    
    
		a[s[i]-'0']++;
	}
	for(int i=0;i<10;i++){
    
    
		if(a[i]!=0){
    
    
			cout << i << ":" << a[i] << endl; 
		}
	}
	return 0;
}

L1-004 计算摄氏温度 (5 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int F;
	cin >> F;
	cout << "Celsius = ";
	cout << 5*(F-32)/9 << endl;
	
	return 0;
}

L1-005 考试座位号 (15 分)

算法标签: 排序

#include<bits/stdc++.h>
using namespace std;
int N;
int M;

typedef struct test{
    
    
	string num;
	int testnum;
	int normalnum;
}test;

const int maxn = 1e3 +5;
test t[maxn];

bool cmp(test t1,test t2){
    
    
	if(t1.testnum<t2.testnum){
    
    
		return true;
	}else{
    
    
		return false;
	}
}

int main(){
    
    
	cin >> N;
	for(int i=0;i<N;i++){
    
    
		cin >> t[i].num >> t[i].testnum >> t[i].normalnum;
	}
	sort(t,t+N,cmp);
	cin >> M;
	for(int i=0;i<M;i++){
    
    
		int a;
		cin >> a;
		cout << t[a-1].num << " " << t[a-1].normalnum <<endl;
	}
	return 0;
} 

L1-006 连续因子 (20 分)

算法标签: 数论
注意: 注意最后一个测试点,考虑很大的质数,输出1换行,并输出该数本身即可
其余情况可从小到大枚举连乘序列的起始值,直到无法除尽为止

#include<bits/stdc++.h>
using namespace std;
bool isprime(long long n){
    
    
	for(int i=2;i<=sqrt(n);i++){
    
    
		if(n%i==0){
    
    
			return false;
		}
	}
	return true;
}
int main(){
    
    
	long long n;
	cin >> n;
	if(isprime(n)){
    
    
		cout << 1 << endl;
		cout << n << endl;
		return 0;
	}
	int maxlength = -1;
	int s = 1;
	for(int i=2;i<=48000;i++){
    
    
		long long t = n;
		int j = i;
		while(1){
    
    
			if(t%j==0){
    
    
				t /= j;
				j++;
			}else{
    
    
				break;
			}
		} 
		int len = j-i;
		if(len > maxlength){
    
    
			maxlength = len;
			s = i;
		}
	}
	cout << maxlength << endl;
	for(int i=1;i<=maxlength;i++){
    
    
		if(i!=maxlength){
    
    
			printf("%d*",s+i-1);
		}else{
    
    
			printf("%d\n",s+i-1);
		}
	}
	
	return 0;
} 

L1-007 念数字 (10 分)

算法标签: 字符串

#include<bits/stdc++.h>
using namespace std;
string s[15] = {
    
    "ling","yi","er","san","si","wu","liu","qi","ba","jiu"};

int main(){
    
    
	string n;
	cin >> n;
	if(n[0]=='0' && n.size()==1){
    
    
		cout << s[0] << endl;
		return 0;
	}else if(n[0] == '-'){
    
    
		cout << "fu ";
		n = n.substr(1);
	}
	for(int i=0;i<n.size();i++){
    
    
		if(i!=n.size()-1){
    
    
			cout << s[n[i]-'0'] << " ";
		}else{
    
    
			cout << s[n[i]-'0'];
		}
	}
	
	return 0;
} 

L1-008 求整数段和 (10 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int a,b;
	cin >> a >> b;
	int cnt = 0;
	int sum = 0;
	for(int i=a;i<=b;i++){
    
    
		cnt++;
		printf("%5d",i);
		if(cnt%5==0){
    
    
			cout << endl;
		}
		sum+=i;
	}
	if(cnt%5!=0){
    
    
		cout << endl;
	}
	printf("Sum = %d\n",sum);
	return 0;
}

L1-009 N个数求和 (20 分)

算法标签: 数论
注意: 分数类模板,具体可参考数据结构专题系列(分数运算)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
struct Fraction{
    
    
	LL up;
	LL down;
};
Fraction result;
Fraction temp;
LL gcd(LL a,LL b){
    
    
	if(b==0){
    
    
		return a;
	}else{
    
    
		return gcd(b,a%b);
	}
}
Fraction reduction(Fraction F){
    
    
	if(F.up == 0){
    
    
		F.down = 1;
	}
	if(F.down<0){
    
    
		F.down = -F.down;
		F.up = -F.up;
	}
	LL g = gcd(abs(F.up),abs(F.down));
	F.up /= g;
	F.down /= g;
	return F;
}
Fraction add(Fraction F1,Fraction F2){
    
    
	Fraction res;
	res.up = F1.up*F2.down + F1.down*F2.up;
	res.down = F1.down*F2.down;
	res = reduction(res);
	return res;
}
int main(){
    
    
	result.down = 1;
	result.up = 0;
	int n;
	cin >> n;
	for(int i=1;i<=n;i++){
    
    
		scanf("%lld/%lld",&temp.up,&temp.down);
		result = add(result,temp);
	}
	if(result.down==1){
    
    
		cout << result.up << endl;
	}else{
    
    
		if(result.up>=result.down){
    
    
			printf("%lld %lld/%lld\n",result.up/result.down,result.up%result.down,result.down);
		}else{
    
    
			printf("%lld/%lld\n",result.up,result.down);
		}
	}
	return 0;
} 

L1-010 比较大小 (10 分)

算法标签: 排序

#include<bits/stdc++.h>
using namespace std;
int a[5];
int main(){
    
    
	for(int i=0;i<3;i++){
    
    
		cin >> a[i]; 
	}
	sort(a,a+3);
	for(int i=0;i<3;i++){
    
    
		if(i==2){
    
    
			printf("%d\n",a[i]);
		}else{
    
    
			printf("%d->",a[i]);
		}
	}
	return 0;
} 

L1-011 A-B (20 分)

算法标签: 字符串

#include<bits/stdc++.h>
using namespace std;
string s1,s2;
string result = "";
int main(){
    
    
	getline(cin,s1);
	getline(cin,s2);
	for(int i=0;i<s1.size();i++){
    
    
		if(s2.find(s1[i])!=-1){
    
    
			continue;
		}else{
    
    
			result += s1[i];
		}
	}
	cout << result << endl;
	return 0;
} 

L1-012 计算指数 (5 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int n;
	cin >> n;
	int res = 1<<n;
	cout << "2^" << n << " = " << res << endl;
	
	return 0;
} 

L1-013 计算阶乘和 (10 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL f = 1;
LL sum = 0;
int main(){
    
    
	int n;
	cin >> n;
	for(int i=1;i<=n;i++){
    
    
		f*=i;
		sum += f;
	}
	cout << sum << endl;
	return 0;
} 

L1-014 简单题 (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	
	cout << "This is a simple problem." << endl;
	
	return 0;
} 

L1-015 跟奥巴马一起画方块 (15 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int n;
	char ch;
	cin >> n >> ch;
	int c = (n+1)/2;
	for(int j=1;j<=c;j++){
    
    
		for(int i=1;i<=n;i++){
    
    
			cout << ch;
		}
		cout << endl;
	}
	
	return 0;
} 

L1-016 查验身份证 (15 分)

算法标签: 模拟
注意: 按照题目所给出的权重,模拟计算校验码即可

#include<bits/stdc++.h>
using namespace std;
int a[20] = {
    
    7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
int check[11] = {
    
    1,0,10,9,8,7,6,5,4,3,2};

int isdigit(char c){
    
    
	if(c>='0' && c<='9'){
    
    
		return 1;
	}else{
    
    
		return 0;
	}
}
int main(){
    
    
	int N;
	cin >> N;
	int count = 0;
	for(int i=0;i<N;i++){
    
    
		string str;
		cin >> str;
		int result = 0;
		bool flag = true;
		for(int j=0;j<str.size()-1;j++){
    
    
			if(isdigit(str[j])){
    
    
				result += (str[j] -'0')*a[j];
			}else{
    
    
				flag = false;
				break;
			}
		}
		if(flag==false){
    
    
			cout << str << endl;
			count++;
		}else{
    
    
			int r = result % 11;
			if(r==2 && str[17]!='X'){
    
    
				cout << str << endl;
				count++;
			}else if(r!=2 && str[17]-'0' != check[r]){
    
    
				cout << str << endl;
				count++;
			}
		}
	} 
	if(count==0){
    
    
		cout << "All passed" << endl;
	}
	return 0;
} 

L1-017 到底有多二 (15 分)

算法标签: 字符串

#include<bits/stdc++.h>
using namespace std;
double fac = 1.0;
double res;
int main(){
    
    
	string s;
	cin >> s;
	if(s[0]=='-'){
    
    
		s = s.substr(1);
		fac = 1.5;
	}
	if((s[s.size()-1]-'0')%2==0){
    
    
		fac *= 2.0;
	}
	int cnt = 0;
	for(int i=0;i<s.size();i++){
    
    
		if(s[i] == '2'){
    
    
			cnt++;
		}
	}
	res = 1.0*cnt/(1.0*s.size());
	res *= fac;
	res *= 100;
	printf("%.2lf%\n",res);
	return 0;
} 

L1-018 大笨钟 (10 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int h,m;
	scanf("%d:%d",&h,&m);
	if((h>=0 && h<=11) || (h==12 && m==0)){
    
    
		printf("Only %02d:%02d.  Too early to Dang.",h,m);
	}else{
    
    
		if(m>0){
    
    
			h++;
		}
		for(int i=1;i<=h-12;i++){
    
    
			cout << "Dang";
		}
	}
	
	return 0;
} 

L1-019 谁先倒 (15 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
int M1,M2;
int F1,F2;
int main(){
    
    
	cin >> M1 >> M2;
	int N;
	cin >> N;
	for(int i=1;i<=N;i++){
    
    
		int x1,x2,y1,y2;
		cin >> x1 >> x2 >> y1 >> y2;
		bool f1 = false;
		bool f2 = false;
		if(x1+y1 == x2){
    
    
			f1 = true;
		}
		if(x1+y1 == y2){
    
    
			f2 = true;
		}
		if(f1 && !f2){
    
    
			F1++;
			if(F1>M1){
    
    
				cout << "A" << endl;
				cout << F2 << endl;
				break;
			}
		}else if(!f1 && f2){
    
    
			F2++;
			if(F2>M2){
    
    
				cout << "B" << endl;
				cout << F1 << endl;
				break;
			}
		}
	}
	
	return 0;
} 

L1-020 帅到没朋友 (20 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
int a[1005];
bool hashT[100005];
set<int> s;
int main(){
    
    
	int N;
	cin >> N;
	for(int i=1;i<=N;i++){
    
    
		int K;
		cin >> K;
		for(int i=1;i<=K;i++){
    
    
			cin >> a[i];
		}
		if(K>1){
    
    
			for(int j=1;j<=K;j++){
    
    
				s.insert(a[j]);
			}
		}
	}	
	int M;
	cin >> M;
	int cnt = 0;
	for(int i=1;i<=M;i++){
    
    
		int t;
		cin >> t;
		if(!hashT[t]){
    
    
			hashT[t] = true;
			if(s.find(t)==s.end()){
    
    
				if(!cnt){
    
    
					printf("%05d",t);
				}else{
    
    
					printf(" %05d",t);
				}
				cnt++;
			}
		}
	}
	if(!cnt){
    
    
		cout << "No one is handsome" << endl;
	}
	return 0;
} 

L1-021 重要的话说三遍 (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	for(int i=1;i<=3;i++){
    
    
		cout << "I'm gonna WIN!" << endl;
	}
	
	return 0;
} 

L1-022 奇偶分家 (10 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
int N;
int a[1005];
int main(){
    
    
	cin >> N;
	int odd = 0;
	int even = 0;
	for(int i=1;i<=N;i++){
    
    
		cin >> a[i];
		if(a[i]%2==0){
    
    
			even++;
		}else{
    
    
			odd++;
		}
	}
	cout << odd << " " << even << endl;
	
	return 0;
} 

L1-023 输出GPLT (20 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
int a[5];
string s;
int main(){
    
    
	cin >> s;
	int cnt = 0;
	for(int i=0;i<s.size();i++){
    
    
		s[i] = tolower(s[i]);
		if(s[i] == 'g'){
    
    
			a[0]++;
			cnt++;
		}else if(s[i] == 'p'){
    
    
			a[1]++;
			cnt++;
		}else if(s[i] == 'l'){
    
    
			a[2]++;
			cnt++;
		}else if(s[i] == 't'){
    
    
			a[3]++;
			cnt++;
		}
	}
	while(cnt){
    
    
		for(int i=0;i<=3;i++){
    
    
			if(a[i]){
    
    
				a[i]--;
				cnt--;
				if(i==0){
    
    
					cout << "G";
				}else if(i==1){
    
    
					cout << "P";
				}else if(i==2){
    
    
					cout << "L";
				}else if(i==3){
    
    
					cout << "T";
				}
			}
		}
	}
	
	return 0;
} 

L1-024 后天 (5 分)

算法标签: 数论(同余)

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int D;
	cin >> D;
	D = D+2;
	if(D>7){
    
    
		D %= 7;
	}
	
	cout << D << endl;
	
	return 0;
} 

L1-025 正整数A+B (15 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
int isdigit(char ch){
    
    
	if(ch>='0' && ch<='9'){
    
    
		return 1;
	}else{
    
    
		return 0;
	}
}

int main(){
    
    
	string s1;
	string s2;
	cin >> s1;
	getchar();
	getline(cin,s2);
	bool f1 = true;
	bool f2 = true;
	int num1 = 0;
	int num2 = 0;
	for(int i=0;i<s1.size();i++){
    
    
		if(isdigit(s1[i])){
    
    
			continue;
		}else{
    
    
			f1 = false;
			break;
		}
	}
	if(f1){
    
    
		for(int i=0;i<s1.size();i++){
    
    
			num1 = num1*10 + s1[i]-'0';
		}
	}
	for(int i=0;i<s2.size();i++){
    
    
		if(isdigit(s2[i])){
    
    
			continue;
		}else{
    
    
			f2 = false;
			break;
		}
	}
	if(f2){
    
    
		for(int i=0;i<s2.size();i++){
    
    
			num2= num2*10 + s2[i]-'0';
		}
	}
	if(f1 && num1>=1 && num1<=1000){
    
    
		cout << num1;
	}else{
    
    
		cout << "?";
	}
	cout << " + ";
	if(f2 && num2>=1 && num2<=1000){
    
    
		cout << num2; 
	}else{
    
    
		cout << "?";
	}
	cout << " = ";
	if(f1 && f2 && num1>=1 && num1<=1000 && num2>=1 && num2<=1000){
    
    
		cout << num1+num2; 
	}else{
    
    
		cout << "?";
	}
	return 0;
} 

L1-026 I Love GPLT (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	string s="I Love GPLT";
	for(int i=0;i<s.size();i++){
    
    
		cout << s[i] << endl;
	}
	
	return 0;
} 

L1-027 出租 (20 分)

算法标签: 哈希

#include<bits/stdc++.h>
using namespace std;
int hashT[15];
int a[15];
int ans[15];
int main(){
    
    
	string s;
	cin >> s;
	for(int i=0;i<s.size();i++){
    
    
		int t = s[i] -'0';
		hashT[t] = 1;
	}
	int cnt = 0;
	for(int i=9;i>=0;i--){
    
    
		if(hashT[i]){
    
    
			a[cnt++] = i;
		}
	}
	cout << "int[] arr = new int[]{" ;
	for(int i=0;i<cnt;i++){
    
    
		if(i==0){
    
    
			printf("%d",a[i]);
		}else{
    
    
			printf(",%d",a[i]);
		}
	}
	cout << "};" << endl;
	cout << "int[] index = new int[]{";
	for(int i=0;i<s.size();i++){
    
    
		int t = s[i]-'0';
		for(int j=0;j<cnt;j++){
    
    
			if(a[j] == t){
    
    
				ans[i] = j;
				break;
			}
		}
	}
	for(int i=0;i<s.size();i++){
    
    
		if(i==0){
    
    
			printf("%d",ans[i]);
		}else{
    
    
			printf(",%d",ans[i]);
		}
	}
	cout <<"};" << endl;
	
	
	return 0;
} 

L1-028 判断素数 (10 分)

算法标签: 素数筛

#include<bits/stdc++.h>
using namespace std;
int isprime(int t){
    
    
	if(t<=1){
    
    
		return 0;
	}
	for(int i=2;i<=sqrt(t);i++){
    
    
		if(t%i==0){
    
    
			return 0;
		}
	}
	return 1;
}
int main(){
    
    
	int N;
	cin >> N;
	for(int i=1;i<=N;i++){
    
    
		int t;
		cin >> t;
		if(isprime(t)){
    
    
			cout << "Yes" << endl;
		}else{
    
    
			cout << "No" << endl;
		}
	}
	
	return 0;
} 

L1-029 是不是太胖了 (5 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int H;
	cin >> H;
	double ans = 0.0;
	ans = H-100;
	ans *= 0.9;
	ans *= 2.0;
	printf("%.1lf\n",ans);
	
	return 0;
} 

L1-030 一帮一 (15 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
struct student{
    
    
	int sex;
	string s;
	bool f = false;
};
student stu[55];
int main(){
    
    
	int N;
	cin >> N;
	for(int i=1;i<=N;i++){
    
    
		cin >> stu[i].sex >> stu[i].s;
	}
	for(int i=1;i<=N;i++){
    
    
		if(!stu[i].f){
    
    
			int t = 1 - stu[i].sex;
			for(int j=N;j>=1;j--){
    
    
				if(!stu[j].f && stu[j].sex == t){
    
    
					cout << stu[i].s << " " << stu[j].s << endl;
					stu[i].f = true;
					stu[j].f = true;
					break;
				}
			}	
		}
	}
	return 0;
} 

L1-031 到底是不是太胖了 (10 分)

算法标签: if…else语句

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N;
	cin >> N;
	for(int i=1;i<=N;i++){
    
    
		int H,W;
		cin >> H >> W;
		double ans = 0.0;
		ans = H - 100;
		ans *= 0.9;
		ans *= 2.0;
		if(fabs(ans-W)<0.1*ans){
    
    
			cout << "You are wan mei!" << endl;
		}else{
    
    
			if(ans>W){
    
    
				cout << "You are tai shou le!" << endl;
			}else{
    
    
				cout << "You are tai pang le!" << endl;
			}
		} 
	}
	
	return 0;
} 

L1-032 Left-pad (20 分)

算法标签: 字符串

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N;
	char ch;
	cin >> N >> ch;
	getchar();
	string s;
	getline(cin,s);
	if(s.size()>=N){
    
    
		for(int i=s.size()-N;i<s.size();i++){
    
    
			cout << s[i];
		}
	}else{
    
    
		for(int i=0;i<N-s.size();i++){
    
    
			cout << ch;
		}
		cout << s << endl;	
	}
	
	return 0;
} 

L1-033 出生年 (15 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int y,n;
	cin >> y >> n;
	int ans = 0;
	for(int i=y;;i++){
    
    
		int t = i;
		int q,b,s,g;
		q = t/1000;
		b = t/100%10;
		s = t/10%10;
		g = t%10;
		set<int> s1;
		s1.insert(q);
		s1.insert(b);
		s1.insert(s);
		s1.insert(g);
		if(s1.size()==n){
    
    
			ans = i;
			break;
		}
	}
	cout << ans-y << " ";
	printf("%04d\n",ans);
	return 0;
} 

L1-034 点赞 (20 分)

算法标签: 哈希

#include<bits/stdc++.h>
using namespace std;
int hashT[1005];

int main(){
    
    
	int N;
	cin >> N;
	for(int i=1;i<=N;i++){
    
    
		int K;
		cin >> K;
		for(int j=1;j<=K;j++){
    
    
			int t;
			cin >> t;
			hashT[t]++; 
		}
	}	
	int maxn = -1;
	int ans;
	for(int i=1000;i>=1;i--){
    
    
		if(hashT[i]>maxn){
    
    
			maxn = hashT[i];
			ans = i;
		}
	}
	cout << ans << " " << hashT[ans] << endl;
	return 0;
} 

L1-035 情人节 (15 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	string s[10005];
	int i = 0;
	while(1){
    
    
		i++;
		cin >> s[i];
		if(s[i][0] == '.'){
    
    
			i--;
			break;
		}
	}
	if(i>=14){
    
    
		cout << s[2] << " and " << s[14] << " are inviting you to dinner..." << endl;
	}else if(i>=2){
    
    
		cout << s[2] << " is the only one for you..." << endl;
	}else{
    
    
		cout << "Momo... No one is for you ..." << endl;
	}
	return 0;
}

L1-036 A乘以B (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int A,B;
	cin >> A >> B;
	cout << A*B << endl;
	
	return 0;
} 

L1-037 A除以B (10 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int A,B;
	cin >> A >> B;
	double ans;
	if(B>0){
    
    
		ans = 1.0*A/B;
		printf("%d/%d=%.2lf\n",A,B,ans);
	}else if(B==0){
    
    
		printf("%d/%d=Error\n",A,B);
	}else{
    
    
		ans = 1.0*A/B;
		printf("%d/(%d)=%.2lf\n",A,B,ans);
	}
	
	return 0;
}

L1-038 新世界 (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	cout << "Hello World" << endl;
	cout << "Hello New World" << endl;
	return 0;
}

L1-039 古风排版 (20 分)

算法标签: 字符串
注意: 一道好题!考察字符串的输入与输出,注意先从列开始,逐行排版,然后每完成一行,列号递减,注意此题唯一的坑点,排版结束后,空位需补上空格(不是空字符)

#include<bits/stdc++.h>
using namespace std;
char ans[1005][1005];
int main(){
    
    
	int N;
	cin >> N;
	string s;
	getchar();
	getline(cin,s);
	int len = s.size();
	int t;
	if(len%N == 0){
    
    
		t = len/N;
	}else{
    
    
		t = len/N + 1;
	}
	int k = 0;
	
	for(int j=t;j>=1;j--){
    
    
		for(int i=1;i<=N;i++){
    
    
			if(k<len){
    
    
				ans[i][j] = s[k++];
			}else{
    
    
				ans[i][j] = ' ';
			}
		}
	}
	
	for(int i=1;i<=N;i++){
    
    
		for(int j=1;j<=t;j++){
    
    
			cout << ans[i][j];
		}
		if(i!=N){
    
    
			cout << endl;
		}
	}
	return 0;
} 

L1-040 最佳情侣身高差 (10 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N;
	cin >> N;
	for(int i=1;i<=N;i++){
    
    
		char ch;
		double F;
		cin >> ch >> F;
		if(ch == 'F'){
    
    
			printf("%.2lf\n",F*1.09);
		}else{
    
    
			printf("%.2lf\n",F/1.09);
		}
	}
	
	return 0;
} 

L1-041 寻找250 (10 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int t;
	int cnt = 0;
	while(1){
    
    
		cin >> t;
		cnt ++;
		if(t==250){
    
    
			cout << cnt << endl;
			break; 
		}
	}
	
	return 0;
} 

L1-042 日期格式化 (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int yy,mm,dd;
	scanf("%d-%d-%d",&mm,&dd,&yy);
	printf("%04d-%02d-%02d\n",yy,mm,dd);
	
	return 0;
} 

L1-043 阅览室 (20 分)

算法标签: 哈希

#include<bits/stdc++.h>
using namespace std;
bool hashT[1005];
int H[1005];
int M[1005];

int main(){
    
    
	int N;
	cin >> N;
	int cnt = 0;
	int count = 0;
	int sum = 0;
	while(1){
    
    
		int id;
		char key;
		int h,m;
		cin >> id >> key;
		scanf("%d:%d",&h,&m);
		if(id==0){
    
    
			cnt++;
			if(count==0){
    
    
				cout << "0 0" << endl;
			}else{
    
    
				cout << count << " " << round(sum*1.0/count) << endl;
			}
			count = 0;
			sum = 0;
			memset(hashT,0,sizeof(hashT));
			memset(H,0,sizeof(H));
			memset(M,0,sizeof(M));
		}else{
    
    
			if(key == 'S'){
    
    
				H[id] = h;
				M[id] = m;
				hashT[id] = true;
			}else if(key == 'E'){
    
    
				if(hashT[id]){
    
    
					hashT[id] = false;
					sum += ((h*60+m)-(H[id]*60+M[id]));
					count++;
					M[id] = 0;
					H[id] = 0;
				}
			}
		}
		if(cnt==N){
    
    
			break;
		}
	}
	
	return 0;
} 

L1-044 稳赢 (15 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int K;
	cin >> K;
	int cnt = 0;
	while(1){
    
    
		string s;
		cin >> s;
		if(s=="End"){
    
    
			break; 
		}
		cnt++;
		if(cnt%(K+1)==0){
    
    
			cout << s << endl;
		}else{
    
    
			if(s == "ChuiZi"){
    
    
				cout << "Bu" << endl;
			}else if(s == "Bu"){
    
    
				cout << "JianDao" << endl;
			}else{
    
    
				cout << "ChuiZi" << endl;
			}
		}
	}
	
	return 0;
} 

L1-045 宇宙无敌大招呼 (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	string s;
	cin >> s;
	cout << "Hello " << s << endl;
	
	return 0;
} 

L1-046 整除光棍 (20 分)

算法标签: 数论
注意: 一道好题!本题实质上考察的算法是高精除法,由于除法是被除数从高到低枚举,除以除数的过程,因此,我们可以枚举1的个数(枚举的顺序就是从高位到低位的),直至能够除尽题目中所给的数为止
每一位多出来的余数,就将其乘10再加1,和低位一起参与下一步的除法运算
那么何时输出呢?也就是从第一个不为0的数开始输出,此时设置一个bool变量f,用来控制输出,当最高位可以输出以后,其余的每一位都要输出,直至末尾除尽为止

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int x;
	cin >> x;
	int cnt = 0;
	int sum = 1;
	bool f = false;
	while(1){
    
    
		if(sum/x!=0){
    
    
			f = true;
		}
		if(f){
    
    
			cout << sum/x;
		}
		sum %= x;
		cnt++;
		if(sum == 0){
    
    
			break;
		}
		sum = sum*10 + 1;
	} 
	cout << " " << cnt << endl;
	return 0;
}

L1-047 装睡 (10 分)

算法标签: if…else语句

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N;
	cin >> N;
	for(int i=1;i<=N;i++){
    
    
		string s;
		cin >> s;
		int a,b;
		cin >> a >> b;
		if(a<15||a>20||b<50||b>70){
    
    
			cout << s << endl;
		}
	}
	
	return 0;
} 

L1-048 矩阵A乘以B (15 分)

算法标签: 矩阵乘法

#include<bits/stdc++.h>
using namespace std;
int a[105][105];
int b[105][105];
int c[105][105];

int main(){
    
    
	int Ra,Ca,Rb,Cb;
	cin >> Ra >> Ca;
	for(int i=1;i<=Ra;i++){
    
    
		for(int j=1;j<=Ca;j++){
    
    
			cin >> a[i][j];
		}
	}
	cin >> Rb >> Cb;
	for(int i=1;i<=Rb;i++){
    
    
		for(int j=1;j<=Cb;j++){
    
    
			cin >> b[i][j];
		}
	}
	if(Ca!=Rb){
    
    
		cout << "Error: " << Ca << " != " << Rb << endl;
	}else{
    
    
		cout << Ra << " " << Cb << endl;
		for(int i=1;i<=Ra;i++){
    
    
			for(int j=1;j<=Cb;j++){
    
    
				for(int k=1;k<=Rb;k++){
    
    
					c[i][j] += a[i][k]*b[k][j];
				}
			}
		}
		for(int i=1;i<=Ra;i++){
    
    
			for(int j=1;j<=Cb;j++){
    
    
				if(j==1){
    
    
					cout << c[i][j];
				}else{
    
    
					cout << " " << c[i][j];
				}
			}
			cout << endl;
		}
	}
	return 0;
} 

L1-049 天梯赛座位分配 (20 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
int a[105];
int b[105][15][15];
int main(){
    
    
	int N;
	cin >> N;
	int maxn = -1;
	for(int i=1;i<=N;i++){
    
    
		cin >> a[i];
		maxn = max(maxn,a[i]);
	}
	int cnt = 1;
	int count = 0;
	int pre = 0;
	for(int k=1;k<=maxn;k++){
    
    
		for(int j=1;j<=10;j++){
    
    
			for(int i=1;i<=N;i++){
    
    
				if(a[i]>=cnt){
    
    
					if(i!=pre){
    
    
						b[i][cnt][j] = ++count;	
					}else{
    
    
						b[i][cnt][j] = count+2;
						count += 2;
					}
					pre = i;
				}
			}
		}	
		cnt++;
	}
	
	for(int i=1;i<=N;i++){
    
    
		printf("#%d\n",i);
		for(int j=1;j<=a[i];j++){
    
    
			for(int k=1;k<=10;k++){
    
    
				if(k==1){
    
    
					printf("%d",b[i][j][k]);
				}else{
    
    
					printf(" %d",b[i][j][k]);
				}
			}
			printf("\n");
		}
	}
	return 0;
} 

L1-050 倒数第N个字符串 (15 分)

算法标签: 高精减法

#include<bits/stdc++.h>
using namespace std;
int a[10];
int b[10];
int main(){
    
    
	int L,N;
	cin >> L >> N;
	N -= 1;
	int cnt = 0;
	while(N){
    
    
		a[cnt++] = N%26;
		N/=26;
	}
	for(int i=L-1;i>=0;i--){
    
    
		b[i] = 25;
	}
	for(int i=0;i<=L-1;i++){
    
    
		if(a[i]>b[i]){
    
    
			b[i] += 26;
			b[i+1]--;
		}
		b[i] -= a[i];
	}
	for(int i=L-1;i>=0;i--){
    
    
		printf("%c",b[i]+'a');
	}
	return 0;
} 

L1-051 打折 (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N;
	cin >> N;
	int K;
	cin >> K;
	double ans;
	ans = 0.1*N*K;
	printf("%.2lf\n",ans);
	
	return 0;
}

L1-052 2018我们要赢 (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    
	cout << "2018" << endl;
	cout << "wo3 men2 yao4 ying2 !" << endl;
	return 0;
}

L1-053 电子汪 (10 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;
int main(){
    
    
	int A,B;
	cin >> A >> B;
	int ans = A + B;
	for(int i=1;i<=ans;i++){
    
    
		cout << "Wang!";
	} 
	
	return 0;
}

L1-054 福到了 (15 分)

算法标签: 字符串

#include<bits/stdc++.h>
using namespace std;
char s1[105][105];
char s2[105][105];

int main(){
    
    
	char ch;
	cin >> ch;
	int N;
	cin >> N;
	getchar();
	for(int i=1;i<=N;i++){
    
    
		for(int j=1;j<=N;j++){
    
    
			scanf("%c",&s1[i][j]);
		}
		getchar();
	}
	for(int i=1;i<=N;i++){
    
    
		for(int j=1;j<=N;j++){
    
    
			s2[N-i+1][N-j+1] = s1[i][j];
		}
	}
	bool f = false;
	for(int i=1;i<=N;i++){
    
    
		for(int j=1;j<=N;j++){
    
    
			if(s1[i][j] == s2[i][j]){
    
    
				continue;
			}else{
    
    
				f = true;
				break;
			}
		}
		if(f){
    
    
			break;
		} 
	}
	if(!f){
    
    
		cout << "bu yong dao le" << endl;
	}
	for(int i=1;i<=N;i++){
    
    
		for(int j=1;j<=N;j++){
    
    
			if(s2[i][j]!=' '){
    
    
				cout << ch;
			}else{
    
    
				cout << s2[i][j];
			}
		}
		cout << endl;
	}
	return 0;
}

L1-055 谁是赢家 (10 分)

算法标签: if…else

#include<bits/stdc++.h>
using namespace std;
int hashT[5];
int main(){
    
    
	int Pa,Pb;
	cin >> Pa >> Pb;
	for(int i=0;i<3;i++){
    
    
		int t;
		cin >> t;
		hashT[t]++;
	}
	if(Pa>Pb && hashT[0]){
    
    
		cout << "The winner is a: " << Pa << " + " << hashT[0] << endl;
	}else if(Pa<Pb && hashT[1]){
    
    
		cout << "The winner is b: " << Pb << " + " << hashT[1] << endl;
	}else if(Pa>Pb && hashT[1]==3){
    
    
		cout << "The winner is b: " << Pb << " + " << hashT[1] << endl;
	}else if(Pa<Pb && hashT[0]==3){
    
    
		cout << "The winner is a: " << Pa << " + " << hashT[0] << endl;
	}
	return 0;
}

L1-056 猜数字 (20 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
struct student{
    
    
	string s;
	int score;
};
student stu[10005];
int sum = 0;
int maxn = 10005;
int main(){
    
    
	int N;
	cin >> N;
	for(int i=1;i<=N;i++){
    
    
		cin >> stu[i].s >> stu[i].score;
		sum += stu[i].score;
	}
	int ave = sum/N/2;
	int site;
	for(int i=1;i<=N;i++){
    
    
		if(abs(ave-stu[i].score)<maxn){
    
    
			maxn = abs(ave-stu[i].score);
			site = i;
		}
	}
	cout << ave << " " << stu[site].s << endl; 
	return 0;
}

L1-057 PTA使我精神焕发 (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	
	cout << "PTA shi3 wo3 jing1 shen2 huan4 fa1 !" << endl;
	return 0;
}

L1-058 6翻了 (15 分)

算法标签: 字符串

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	string s;
	getline(cin,s);
	bool f = true;
	while(f){
    
    
		f = false;
		int cnt = 0;
		for(int i=0;i<s.size();i++){
    
    
			if(s[i] == '6'){
    
    
				cnt++;
			}else{
    
    
				if(cnt>9){
    
    
					s = s.substr(0,i-cnt) + "27" + s.substr(i);
					f = true;
					cnt = 0;
					break;
				}else if(cnt>3){
    
    
					s = s.substr(0,i-cnt) + "9" + s.substr(i);
					f = true;
					cnt = 0;
					break;
				}
				cnt = 0;
			}
		}
		if(cnt>9){
    
    
			s = s.substr(0,s.size()-cnt) + "27";
			f = true;
			cnt = 0;
		}else if(cnt>3){
    
    
			s = s.substr(0,s.size()-cnt) + "9";
			f = true;
			cnt = 0;
		}
		cnt = 0;
	} 
	cout << s << endl;
	return 0;
}

L1-059 敲笨钟 (20 分)

算法标签: 字符串

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N;
	cin >> N;
	getchar();
	string s;
	
	for(int i=1;i<=N;i++){
    
    
		getline(cin,s);
		int site = -1;
		bool f1 = false;
		bool f2 = false;
		while(1){
    
    
			site = s.find("ong",site+1);
			if(site == -1){
    
    
				break;
			}
			if(s[site+3] == ','){
    
    
				f1 = true;
			}
			if(s[site+3] == '.'){
    
    
				f2 = true;
			}
		}
		if(f1 && f2){
    
    
			int cnt = 0;
			int si;
			for(int j=s.size()-1;j>=0;j--){
    
    
				if(s[j] == ' '){
    
    
					cnt++;
				}
				if(cnt==3){
    
    
					si = j;
					break;
				}
			}
			cout << s.substr(0,si) << " qiao ben zhong." << endl;
		}else{
    
    
			cout << "Skipped" << endl;
		}
	}
	return 0;
}

L1-060 心理阴影面积 (5 分)

算法标签: 计算几何

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int x,y;
	cin >> x >> y;
	int S = (x-y)*100/2;
	cout << S << endl;
	return 0;
}

L1-061 新胖子公式 (10 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	double w,h;
	cin >> w >> h;
	w /= h;
	w /= h;
	printf("%.1lf\n",w);
	if(w>25){
    
    
		cout << "PANG" << endl;
	}else{
    
    
		cout << "Hai Xing" << endl;
	}
	
	return 0;
}

L1-062 幸运彩票 (15 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N;
	cin >> N;
	for(int i=1;i<=N;i++){
    
    
		int t;
		cin >> t;
		int cnt = 0;
		int sum = 0;
		int sum1;
		while(cnt<6){
    
    
			sum += t%10;
			cnt++;
			t/=10;
			if(cnt==3){
    
    
				sum1 = sum;
			}
		}
		if(sum == 2*sum1){
    
    
			cout << "You are lucky!" << endl;
		}else{
    
    
			cout << "Wish you good luck." << endl;
		}
	}
	
	return 0;
}

L1-063 吃鱼还是吃肉 (10 分)

算法标签: if…else语句

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N;
	cin >> N;
	for(int i=1;i<=N;i++){
    
    
		int sex,h,w;
		cin >> sex >> h >> w;
		if(sex == 1){
    
    
			if(h==130){
    
    
				cout << "wan mei!";
			}else if(h>130){
    
    
				cout << "ni li hai!";
			}else if(h<130){
    
    
				cout << "duo chi yu!";
			}
			cout << " ";
			if(w==27){
    
    
				cout << "wan mei!";
			}else if(w<27){
    
    
				cout << "duo chi rou!";
			}else{
    
    
				cout << "shao chi rou!";
			}	
		}else{
    
    
			if(h==129){
    
    
				cout << "wan mei!";
			}else if(h>129){
    
    
				cout << "ni li hai!";
			}else if(h<129){
    
    
				cout << "duo chi yu!";
			}
			cout << " ";
			if(w==25){
    
    
				cout << "wan mei!";
			}else if(w<25){
    
    
				cout << "duo chi rou!";
			}else{
    
    
				cout << "shao chi rou!";
			}
		}
		cout << endl;
	}
	
	return 0;
}

L1-064 估值一亿的AI核心代码 (20 分)

算法标签: 字符串
注意: 一道好题!
这道题是字符串的综合题,题目中强调对原字符串进行修改,而不是对修改后的字符串在进行修改(此处易混淆)
因此,对字符串先后修改的顺序没有要求,我们可以指定一个处理的顺序
我们对字符串的若干项操作分类,可分成如下的两类:
1.单字符修改/删除
(1)消除原文中多余空格:把相邻单词间的多个空格换成 1 个空格,把行首尾的空格全部删掉,把标点符号前面的空格删掉(一个一个空格处理)
(2)把原文中所有大写英文字母变成小写,除了 I I I
(3)把原文中所有的问号 ? 换成惊叹号 !
2.单词替换
(1)把原文中所有独立的 can you、could you 对应地换成 I can、I could—— 这里“独立”是指被空格或标点符号分隔开的单词
(2)把原文中所有独立的 I 和 me 换成 you
依据这两类我们可以将程序分成两个部分分别处理,对于单字符的情况比较容易处理,但是对于词组替换时,需考虑前后边界是否是空格或标点符号或字符串首尾,这种情况才满足题目所述的要求

#include<bits/stdc++.h>
using namespace std;
string ans;
int ischar(char ch){
    
    
	if(ch == ' '){
    
    
		return 1;
	}else if(isdigit(ch)){
    
    
		return 2;
	}else if(isalpha(ch)){
    
    
		return 3; 
	}else{
    
    
		return 4;
	}
}
int check(int l,int r){
    
    
	if((l<0 || ans[l] == ' ' || ischar(ans[l]) == 4) && 
	(r>=ans.size() || ans[r] == ' ' || ischar(ans[r]) == 4)){
    
    
		return 1;
	}
	return 0;
}
int main(){
    
    
	int N;
	cin >> N;
	getchar();
	for(int i=1;i<=N;i++){
    
    
		string s;
		getline(cin,s);
		cout << s << endl;
		cout << "AI: ";
		ans = "";
		int l,r;
		for(int i=0;i<s.size();i++){
    
    
			if(s[i] == ' '){
    
    
				continue;
			}else{
    
    
				l = i;
				break;
			}
		}	
		for(int i=s.size()-1;i>=0;i--){
    
    
			if(s[i] == ' '){
    
    
				continue;
			}else{
    
    
				r = i;
				break;
			}
		}
		//replace single char
		for(int i=l;i<=r;i++){
    
    		
			if(s[i] == '?'){
    
    
				ans += '!';
			}else if(isupper(s[i]) && s[i]!='I'){
    
    
				ans += tolower(s[i]);
			}else if(s[i] == ' ' && (s[i+1] == ' ' || ischar(s[i+1])==4)){
    
    
				continue;
			}else{
    
    
				ans += s[i];
			}
		}
		//replace words
		for(int i=0;i<ans.size();){
    
    
			if(ans[i] == 'I' && check(i-1,i+1)){
    
    
				cout << "you";
				i++;
			}else if(ans.substr(i,2) == "me" && check(i-1,i+2)){
    
    
				cout << "you";
				i+=2;
			}else if(ans.substr(i,7) == "can you" && check(i-1,i+7)){
    
    
				cout << "I can";
				i+=7;
			}else if(ans.substr(i,9) == "could you" && check(i-1,i+9)){
    
    
				cout << "I could";
				i+=9;
			}else{
    
    
				cout << ans[i];
				i+=1;
			}
		}
		cout << endl;
	}
	
	
	return 0;
}

L1-065 嫑废话上代码 (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	cout << "Talk is cheap. Show me the code." << endl; 
	return 0;
}

L1-066 猫是液体 (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int a,b,c;
	cin >> a >> b >> c;
	cout << a*b*c << endl;
	
	return 0;
}

L1-067 洛希极限 (10 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	double s;
	int id;
	double ans;
	cin >> s >> id >> ans;
	if(id==0){
    
    
		s*=2.455;
	}else{
    
    
		s*=1.26;
	}
	if(s>ans){
    
    
		printf("%.2lf T_T\n",s);
	}else{
    
    
		printf("%.2lf ^_^\n",s);
	}
	return 0;
}

L1-068 调和平均 (10 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
double ans = 0.0;
int main(){
    
    
	int N;
	cin >> N;
	for(int i=1;i<=N;i++){
    
    
		double s;
		cin >> s;
		ans += (1.0/s);
	}	
	ans /= N;
	ans = 1.0/ans;
	printf("%.2lf\n",ans);
	return 0;
}

L1-069 胎压监测 (15 分)

算法标签: if…else语句

#include<bits/stdc++.h>
using namespace std;
int a[5];
int low;
int t;
int maxn = -1;
int main(){
    
    
	for(int i=1;i<=4;i++){
    
    
		cin >> a[i];
	}
	cin >> low >> t;
	for(int i=1;i<=4;i++){
    
    
		maxn = max(maxn,a[i]);
	}
	int cnt1 = 0;
	int cnt2 = 0;
	for(int i=1;i<=4;i++){
    
    
		if(abs(a[i]-maxn)>t){
    
    
			cnt1++;
		} 
		if(a[i]<low){
    
    
			cnt2++; 
		}
	}
	if(!cnt1 && !cnt2){
    
    
		cout << "Normal" << endl;
	}else if((cnt1==1 || cnt2==1) && cnt1+cnt2<=1){
    
    
		if(cnt1==1){
    
    
			for(int i=1;i<=4;i++){
    
    
				if(abs(a[i]-maxn)>t){
    
    
					cout << "Warning: please check #" << i << "!" << endl;
 					break;
				}
			}
		}else if(cnt2==1){
    
    
			for(int i=1;i<=4;i++){
    
    
				if(a[i]<low){
    
    
					cout << "Warning: please check #" << i << "!" << endl;	
					break;
				}
			}
		}
	}else{
    
    
		cout << "Warning: please check all the tires!" << endl;
	}
	return 0;
}

L1-070 吃火锅 (15 分)

算法标签: 字符串

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	string s;
	int cnt = 0;
	bool f = false;
	int ans1 = 0;
	int ans2 = 0;
	while(1){
    
    
		getline(cin,s);
		if(s.size()==1 && s[0]=='.'){
    
    
			break;
		}
		cnt++;
		int site = s.find("chi1 huo3 guo1");
		if(site!=-1){
    
    
			if(!f){
    
    
				f = true;
				ans1 = cnt;
			}
			ans2++;
		}
	}
	cout << cnt << endl;
	if(ans1 && ans2){
    
    
		cout << ans1 << " " << ans2 << endl;
	}else{
    
    
		cout << "-_-#" << endl;
	}
	
	return 0;
}

L1-071 前世档案 (20 分)

算法标签: 进制

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N,M;
	cin >> N >> M;
	for(int i=1;i<=M;i++){
    
    
		string s;
		cin >> s;
		int ans = 0;
		for(int j=0;j<N;j++){
    
    
			int t;
			if(s[j] == 'y'){
    
    
				t = 0;
			}else{
    
    
				t = 1;
			}
			ans = ans*2+t;
		} 
		cout << ans+1 << endl;
	}
	
	return 0;
}

L1-072 刮刮彩票 (20 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
int a[] = {
    
    0,
			0,0,0,0,0,
			10000,36,720,360,80,
			252,108,72,54,180,
			72,180,119,36,306,
			1080,144,1800,3600};
int b[5][5];
int c[5][5];
int hashT[10];
int main(){
    
    
	for(int i=1;i<=3;i++){
    
    
		for(int j=1;j<=3;j++){
    
    
			cin >> b[i][j];
			hashT[b[i][j]] = 1;
		}
	}
	int r;
	for(int i=1;i<=9;i++){
    
    
		if(!hashT[i]){
    
    
			r = i;
			break;
		}
	}

	for(int i=1;i<=3;i++){
    
    
		for(int j=1;j<=3;j++){
    
    
			if(!b[i][j]){
    
    
				c[i][j] = r;
			}else{
    
    
				c[i][j] = b[i][j];
			}
		}
	}
	
	for(int i=0;i<3;i++){
    
    
		int x,y;
		cin >> x >> y;
		b[x][y] = 0;
		cout << c[x][y] << endl;
	}
	int op;
	cin >> op;
	int ans = 0;
	if(op==1){
    
    
		for(int i=1;i<=3;i++){
    
    
			ans += c[1][i];
		}
	}else if(op==2){
    
    
		for(int i=1;i<=3;i++){
    
    
			ans += c[2][i];
		}
	}else if(op==3){
    
    
		for(int i=1;i<=3;i++){
    
    
			ans += c[3][i];
		}
	}else if(op==4){
    
    
		for(int i=1;i<=3;i++){
    
    
			ans += c[i][1];
		}
	}else if(op==5){
    
    
		for(int i=1;i<=3;i++){
    
    
			ans += c[i][2];	
		}
	}else if(op==6){
    
    
		for(int i=1;i<=3;i++){
    
    
			ans += c[i][3];
		}
	}else if(op==7){
    
    
		for(int i=1;i<=3;i++){
    
    
			ans += c[i][i];
		}
	}else if(op==8){
    
    
		for(int i=1;i<=3;i++){
    
    
			ans += c[3-i+1][i];
		}
	}
	cout << a[ans] << endl;
	return 0;
}

L1-073 人与神 (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	
	cout << "To iterate is human, to recurse divine." << endl;
	 
	return 0;
}

L1-074 两小时学完C语言 (5 分)

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N,K,M;
	cin >> N >> K >> M;
	cout << N-K*M << endl;
	
	return 0;
}

L1-075 强迫症 (10 分)

算法标签: 字符串

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	string s;
	cin >> s;
	if(s.size()==4){
    
    
		int t = 0;
		t += (s[0]-'0');
		t*=10;
		t += (s[1]-'0');
		if(t<22){
    
    
			cout << "20" << s.substr(0,2) << "-" << s.substr(2) << endl; 
		}else{
    
    
			cout << "19" << s.substr(0,2) << "-" << s.substr(2) << endl;
		}
	}else{
    
    
		cout << s.substr(0,4) << "-" << s.substr(4) << endl;
	}
	
	return 0;
}

L1-076 降价提醒机器人 (10 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N,M;
	cin >> N >> M;
	for(int i=1;i<=N;i++){
    
    
		double s;
		cin >> s;
		if(s<M){
    
    
			printf("On Sale! %.1lf\n",s); 
		}
	}
	
	return 0;
}

L1-077 大笨钟的心情 (15 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
int a[30];
int main(){
    
    
	for(int i=0;i<24;i++){
    
    
		cin >> a[i];
	}
	while(1){
    
    
		int t;
		cin >> t;
		if(t>=0 && t<=23){
    
    
			cout << a[t] << " ";
			if(a[t]>50){
    
    
				cout << "Yes" << endl;
			}else{
    
    
				cout << "No" << endl;
			}
		}else{
    
    
			break;
		}
	}
	return 0;
}

L1-078 吉老师的回归 (15 分)

算法标签: 字符串

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N,M;
	cin >> N >> M;
	getchar();
	bool f = false;
	int cnt = 0;
	for(int i=1;i<=N;i++){
    
    
		string s;
		getline(cin,s);
		if(s.find("qiandao")!=-1 || s.find("easy")!=-1){
    
    
			continue;
		}else{
    
    
			cnt++;
		}
		if(cnt>M){
    
    
			cout << s << endl;
			f = true;
			break;
		}
	}
	if(!f){
    
    
		cout << "Wo AK le" << endl;
	}
	return 0;
} 

L1-079 天梯赛的善良 (20 分)

算法标签: 枚举

#include<bits/stdc++.h>
using namespace std;
int minn = -1;
int maxn = 1e6+5;
int a[100005];
int main(){
    
    
	int N;
	cin >> N;
	int cnt1 = 0;
	int cnt2 = 0;
	for(int i=1;i<=N;i++){
    
    
		cin >> a[i];
	}
	for(int i=1;i<=N;i++){
    
    
		if(a[i]>minn){
    
    
			minn = a[i];
			cnt1 = 1;
		}else if(a[i] == minn){
    
    
			cnt1++;
		}
		if(a[i]<maxn){
    
    
			maxn = a[i];
			cnt2 = 1;
		}else if(a[i] == maxn){
    
    
			cnt2++;
		}
	}
	cout << maxn << " " << cnt2 << endl;
	cout << minn << " " << cnt1 << endl;
	return 0;
}

L1-080 乘法口诀数列 (20 分)

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
int a1,a2,n;
int a[10005];
int ans[10005];
int main(){
    
    
	cin >> a1 >> a2 >> n;
	a[1] = a1;
	a[2] = a2;
	int j = 3;
	for(int i=3;;i++){
    
    
		int t = a[i-2]*a[i-1];
		if(t<10){
    
    
			a[j++] = t;
		}else{
    
    
			int s = t/10;
			a[j++] = s;
			int g = t%10;
			a[j++] = g;
		}
		if(j>n){
    
    
			break;
		}
	}
	for(int i=1;i<=n;i++){
    
    
		if(i==1){
    
    
			printf("%d",a[i]);
		}else{
    
    
			printf(" %d",a[i]);
		}
	}
	return 0;
} 

L1-081 今天我要赢

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	cout << "I'm gonna win! Today!" << endl;
	cout << "2022-04-23" << endl;
	return 0;	
}

L1-082 种钻石

算法标签: 简单除法

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int N,V;
	cin >> N >> V;
	cout << N/V << endl;
	
	return 0;
}

L1-083 谁能进图书馆

算法标签: if…else语句

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int T1,T2;
	cin >>T1 >> T2;
	int N1,N2;
	cin >> N1 >> N2;
	if(N1>=T1 && N2>=T1){
    
    
		printf("%d-Y %d-Y\n",N1,N2);
		cout << "huan ying ru guan" << endl;
	}else if(N1<T1 && N2<T1){
    
    
		printf("%d-N %d-N\n",N1,N2);
		cout << "zhang da zai lai ba" << endl; 
	}else if(N1>=T1 && N2<T1){
    
    
		if(N1>=T2){
    
    
			printf("%d-Y %d-Y\n",N1,N2);
			cout << "qing 1 zhao gu hao 2" << endl;
		}else{
    
    
			printf("%d-Y %d-N\n",N1,N2);
			cout << "1: huan ying ru guan" << endl;
		}
	}else if(N1<T1 && N2>=T1){
    
    
		if(N2>=T2){
    
    
			printf("%d-Y %d-Y\n",N1,N2);
			cout << "qing 2 zhao gu hao 1" << endl;
		}else{
    
    
			printf("%d-N %d-Y\n",N1,N2);
			cout << "2: huan ying ru guan" << endl;
		}
	}
	
	return 0;
}

L1-084 拯救外星人

算法标签: 数论(阶乘)

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
	int A,B;
	cin >> A >> B;
	int T;
	T = A+B;
	long long sum = 1;
	for(int i=1;i<=T;i++){
    
    
		sum *= i;
	} 
	cout << sum << endl;
	return 0;
}

L1-085 试试手气

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
int a[10];
int b[10];
int main(){
    
    
	for(int i=1;i<=6;i++){
    
    
		cin >> a[i];
	}
	int n;
	cin >> n;
	for(int i=1;i<=6;i++){
    
    
		int t = 7 - n;
		if(t>a[i]){
    
    
			b[i] = t;
		}else{
    
    
			b[i] = t-1;
		}
	}
	for(int i=1;i<=6;i++){
    
    
		if(i==1){
    
    
			cout << b[i];
		}else{
    
    
			cout << " " << b[i];
		}
	}
	return 0;
}

L1-086 斯德哥尔摩火车上的题

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
string s1 = "";
string s2 = "";
string a1,a2;
int main(){
    
    
	cin >> a1 >> a2;
	for(int i=1;i<a1.size();i++) {
    
    
	  	if(a1[i]%2 == a1[i-1]%2) {
    
    
	    	s1 += max(a1[i],a1[i-1]);
	  	}
	}
	for(int i=1;i<a2.size();i++) {
    
    
	  	if(a2[i]%2 == a2[i-1]%2) {
    
    
	    	s2 += max(a2[i],a2[i-1]);
	  	}
	}
	if(s1 == s2){
    
    
		cout << s1 << endl;
	}else{
    
    
		cout << s1 << endl;
		cout << s2 << endl;
	}
	return 0;
}

L1-087 机工士姆斯塔迪奥

算法标签: 组合数学
注意: 由题意知,假设N行,M列,那么指定其中的R行,C列后,剩余未被覆盖的方格数为:
S = N ∗ M − R ∗ M − C ∗ N + R ∗ C S=N*M-R*M-C*N+R*C S=NMRMCN+RC
最后注意去除重复统计的行列(比如2次操作都是第一行)

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+5;
bool hashR[maxn];
bool hashC[maxn];
int main(){
    
    
	int N,M,Q;
	cin >> N >> M >> Q;
	long long sum = 1LL*N*M;
	int cnt1 = 0;
	int cnt2 = 0;
	for(int i=1;i<=Q;i++){
    
    
		int T,C;
		cin >> T >> C;
		if(T==0){
    
    
			if(!hashR[C]){
    
    
				cnt1++;
				hashR[C] = true;
				sum -= M;
			}
		}else{
    
    
			if(!hashC[C]){
    
    
				cnt2++;
				hashC[C] = true;
				sum -= N;
			}
		}
	}
	if(cnt1 && cnt2){
    
    
		sum += cnt1*cnt2;
	}
	cout << sum << endl;
	return 0;
}

L1-088 静静的推荐

算法标签: 排序
注意: 先根据天梯赛分数排序,然后按照PAT分数排序
对于天梯赛分数相同的获得者( ∀ k > = 175 , k ≡ C \forall k >=175,k\equiv C k>=175kC),将其划分为2类,一类是PAT满足条件的,另一类是不满足条件的,满足条件的人可以和不满足条件的任意一人,安排在同一批次推送,因此只需要比较不满足条件的人数与K批次的大小关系,若小于等于K,那么这些人都可以在K批次内被推送,否则只能推送K个不满足条件的+所有满足条件的

#include<bits/stdc++.h>
using namespace std;
struct node{
    
    
	int score;
	int PAT;
};
const int maxn = 1e5+5;
node t[maxn];
bool cmp(node t1,node t2){
    
    
	if(t1.score!=t2.score){
    
    
		return t1.score < t2.score;
	}else{
    
    
		return t1.PAT < t2.PAT;
	}
}

int main(){
    
    
	int N,K,S;
	cin >> N >> K >> S;
	for(int i=0;i<N;i++){
    
    
		scanf("%d%d",&t[i].score,&t[i].PAT);
	}
	sort(t,t+N,cmp);
	int cnt = 0;
	for(int i=0;i<N;){
    
    
		if(t[i].score>=175){
    
    
			int j1 = i;
			int j2 = i;
			int count1=0,count2=0;
			for(int k=j1;k<N;k++){
    
    
				if(t[k].score == t[k+1].score){
    
    
					continue;
				}else{
    
    
					j2 = k;
					break;
				}
			}
			for(int k=j1;k<=j2;k++){
    
    
				if(t[k].PAT>=S){
    
    
					count1++;
				}else{
    
    
					count2++;
				}
			}
			if(count2<=K){
    
    
				cnt += (count1+count2); 
			}else{
    
    
				cnt += (K + count1);
			}
			i = j2+1;
		}else{
    
    
			i++;
		}
	}
	cout << cnt << endl;
	
	return 0;
}

L1-089 最好的文档

算法标签: 输入/输出

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
    cout << "Good code is its own best documentation." << endl;
    return 0;
}

L1-090 什么是机器学习

算法标签: 简单加法

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
    int A,B;
    cin >> A >> B;
    cout << A+B-16 << endl;
    cout << A+B-3 << endl;
    cout << A+B-1 << endl;
    cout << A+B << endl;
    return 0;
}

L1-091 程序员买包子

算法标签: if…else…语句

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
    string X;
    int N,M,K;
    cin >> N >> X >> M >> K;
    if (K == N){
    
    
        cout << "mei you mai " << X << " de" << endl;
    }else if(K == M){
    
    
        cout << "kan dao le mai " << X << " de" << endl;
    }else{
    
    
        cout << "wang le zhao mai " << X << " de" << endl;
    }
    return 0;
}

L1-092 进化论

算法标签: if…else…语句

#include<bits/stdc++.h>
using namespace std;

int main(){
    
    
    int N;
    cin >> N;
    while(N--){
    
    
        int A,B,C;
        cin >> A >> B >> C;
        if(A * B == C){
    
    
            cout << "Lv Yan" << endl;
        }else if(A + B == C){
    
    
            cout << "Tu Dou" << endl;
        }else{
    
    
            cout << "zhe du shi sha ya!" << endl;
        }
    }
    return 0;
}

L1-093 猜帽子游戏

算法标签: 模拟

#include<bits/stdc++.h>
using namespace std;
int a[105];
int guess[105];

int main(){
    
    
    int N;
    cin >> N;
    for(int i=1;i<=N;i++){
    
    
        cin >> a[i];
    }
    int K;
    cin >> K;
    while(K--){
    
    
        for(int i=1;i<=N;i++){
    
    
            cin >> guess[i];
        }
        bool noguess = false;
        int num_noguess = 0;
        bool nocorrect = false;
        bool leastonecorrect = false;
        for(int i=1;i<=N;i++){
    
    
            if(guess[i] == 0){
    
    
                num_noguess += 1;
            }else if(guess !=0  && guess[i] != a[i]){
    
    
                nocorrect = true;
                break;
            }else if(guess[i] == a[i]){
    
    
                leastonecorrect = true;
            }
        }
        if(num_noguess == N){
    
    
            noguess = true;
        }
        if(!nocorrect && leastonecorrect){
    
    
            cout << "Da Jiang!!!" << endl;
        }else{
    
    
            cout << "Ai Ya" << endl;
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_41801682/article/details/123955519