第8次CCF CSP认证真题解

1、最大波动

题目链接:https://sim.csp.thusaac.com/contest/8/problem/0

100分代码:

cpp 复制代码
#include <iostream>
#include <algorithm>
using namespace std;
int main(int argc, char *argv[])
{
	int n;
	cin >> n;
	
	int a[1010];
	for(int i = 0; i < n; i++){
		cin >> a[i];
	}
	
	int max_value = 0;
	for(int i = 1; i < n; i++){
		max_value = max(max_value , abs(a[i] - a[i-1]));
	}
	cout << max_value << endl;
	
	return 0;
}

评测结果:

2、火车购票

题目链接:https://sim.csp.thusaac.com/contest/8/problem/1

本题需要注意一个边界条件:20排座位中每排都有被安排了,且剩下的人购买的车票无法安排在同一排,只能安排在编号最小的几个空座位中。如果边界条件考虑少了,可能就只有90分。

未考虑边界条件的90分代码:

cpp 复制代码
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
	int n;
	cin >> n;
	
	int p[110];
	for(int i = 1; i <= n; i++){
	    cin >> p[i];	
	}
	
	int a[30][15] = {0};
	for(int i = 1; i <= n; i++){
		int count2 = 0;
		for(int j = 1; j <= 20; j++){
			int count1 = 0; 
			for(int k = 1; k <= 5; k++){
				if(a[j][k] == 0)count1++;
			}
			if(count1 >= p[i]){
			   int count3 = 0;
			   for(int t = 1; t <= 5; t++){
   			       if(a[j][t] == 0){
   			       	  a[j][t] = (j-1)*5+t;
       			   	  cout << a[j][t] << " ";	
       			   	  count3++;
       			   }
				   if(count3 == p[i])break;  			     
   			   }
   			   cout << endl;
   			   break;
			}
			else if(count1 < p[i]){
               count2++;
               continue;
			}
		}
	}
	
	return 0;
}

评测结果:

100分代码:

cpp 复制代码
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
	int n;
	cin >> n;
	
	int p[110];
	for(int i = 1; i <= n; i++){
	    cin >> p[i];	
	}
	
	int a[30][15] = {0};
	for(int i = 1; i <= n; i++){
		int count2 = 0;
		for(int j = 1; j <= 20; j++){
			int count1 = 0; 
			for(int k = 1; k <= 5; k++){
				if(a[j][k] == 0)count1++;
			}
			if(count1 >= p[i]){
			   int count3 = 0;
			   for(int t = 1; t <= 5; t++){
   			       if(a[j][t] == 0){
   			       	  a[j][t] = (j-1)*5+t;
       			   	  cout << a[j][t] << " ";	
       			   	  count3++;
       			   }
				   if(count3 == p[i])break;  			     
   			   }
   			   cout << endl;
   			   break;
			}
			else if(count1 < p[i]){
               count2++;
               continue;
			}
		}
		if(count2 == 20){                  //边界条件 
		   for(int x = 1; x <= 20; x++){
   		       for(int y = 1; y <= 5; y++){
       		   	   if(a[x][y] == 0){
       		   	   	  a[x][y] = (x-1)*5+y;
   	   		       	  cout << a[x][y] << " ";
   	   		       }
       		   }	
   		   }
		}
	}
	
	return 0;
}

评测结果:

相关推荐
卷福同学17 分钟前
【AI编程】AI+高德MCP不到10分钟搞定上海三日游
人工智能·算法·程序员
mit6.82418 分钟前
[Leetcode] 预处理 | 多叉树bfs | 格雷编码 | static_cast | 矩阵对角线
算法
皮卡蛋炒饭.40 分钟前
数据结构—排序
数据结构·算法·排序算法
Tanecious.1 小时前
C++--红黑树
开发语言·c++
??tobenewyorker2 小时前
力扣打卡第23天 二叉搜索树中的众数
数据结构·算法·leetcode
贝塔西塔2 小时前
一文读懂动态规划:多种经典问题和思路
算法·leetcode·动态规划
众链网络2 小时前
AI进化论08:机器学习的崛起——数据和算法的“二人转”,AI“闷声发大财”
人工智能·算法·机器学习
2 小时前
Unity开发中常用的洗牌算法
java·算法·unity·游戏引擎·游戏开发
tanyongxi664 小时前
C++ Map 和 Set 详解:从原理到实战应用
开发语言·c++
飒飒真编程4 小时前
C++类模板继承部分知识及测试代码
开发语言·c++·算法