历年CSP-J第二轮题目

CSP-J2022

P8813 [CSP-J2022] 乘方

#include <bits/stdc++.h>
using namespace std;
int a, b;
long long ans=1;	//可能会爆int 
int main() 
{
	scanf("%d %d", &a, &b);	
	if(a==1){	//避免TLE, 因为b可以到10^9 
		printf("1");
		return 0;
	}
	for(int i=1; i<=b; ++i){
		ans*=a;
		if(ans>1e9){
			printf("-1");
			return 0;
		}
	}
	printf("%lld", ans);
	return 0;
}

P8814 [CSP-J2022] 解密

暴力部分分

//暴力部分分
#include <bits/stdc++.h>
using namespace std;
int k;
bool flag;
long long n, e, d, p, q, delta, sqr;
int main() 
{
	scanf("%d", &k);
	while(k--){
		scanf("%lld %lld %lld", &n, &d, &e);
		flag=false;
		for(int p=1; p<=sqrt(n); ++p){
			if(n%p!=0){
				continue;
			}
			q=n/p;
			if(e*d==(p-1)*(q-1)+1){
				printf("%lld %lld\n", p, q);
				flag=true;
				break;
			}
		}
		if(!flag){
			printf("NO\n");
		}
	}
	return 0;
}

方法1:数学推导,求根公式

#include <bits/stdc++.h>
using namespace std;
int k;
long long n, e, d, p, q, delta, sqr;
int main() 
{
	scanf("%d", &k);
	//p*p+(e*d-n-2)*p+n=0
	while(k--){
		scanf("%lld %lld %lld", &n, &d, &e);
		delta=(e*d-n-2)*(e*d-n-2)-4*n;
		sqr=sqrt(delta);
		//无解、无整数解 
		if(delta<0 || sqr*sqr!=delta || ((n+2-e*d)-sqr)%2!=0 || ((n+2-e*d)+sqr)%2!=0){
			printf("NO\n");
			continue;
		}
		p=((n+2-e*d)-sqr)/2;
		q=((n+2-e*d)+sqr)/2;
		if(p<0 || q<0){
			printf("NO\n");
			continue;	
		}
		printf("%lld %lld\n", p, q);	
	}
	return 0;
}

方法2:二分

#include <bits/stdc++.h>
using namespace std;
int k;
long long n, e, d, p, q, l, r, mid, asd;
int main() 
{
	scanf("%d", &k);
	//ed=pq-p-q+2, p+q固定, p越小, pq越小, n=pq 
	//ed=n-p-q+2, p+q=n-ed+2
	while(k--){
		scanf("%lld %lld %lld", &n, &d, &e);
		asd=n-e*d+2;
		l=1, r=asd/2;    //r=sqrt(n);也行
		while(l<r){
			mid=(l+r)>>1;
			//p小了,得往大 
			if(mid*(asd-mid)<n){
				l=mid+1; 
			}
			else{	//p大了, 得往小 
				r=mid;
			}
		}
		if(n%l==0 && l*(asd-l)==n){
			printf("%lld %lld\n", l, n/l);
		}
		else{
			printf("NO\n");
		}
	}
	return 0;
}

二分错误代码

#include <bits/stdc++.h>
using namespace std;
int k;
long long n, e, d, p, q, l, r, mid;
int main() 
{
	scanf("%d", &k);
	//ed=pq-p-q+2, pq固定, p越小, p+q越大, pq-p-q+2越小 
	while(k--){
		scanf("%lld %lld %lld", &n, &d, &e);
		l=1, r=sqrt(n);
		//错误原因, 无法确保n%mid为0,从而无法确保(mid-1)*(n/mid-1)+1的准确性 
		while(l<r){
			mid=(l+r)>>1;
			//p小了,得往大 
			if((mid-1)*(n/mid-1)+1<e*d){
				l=mid+1; 
			}
			else{	//p大了, 得往小 
				r=mid;
			}
		}
		if(n%l==0 && (l-1)*(n/l-1)+1==e*d){
			printf("%lld %lld\n", l, n/l);
		}
		else{
			printf("NO\n");
		}
	}
	return 0;
}

P8815 [CSP-J2022] 逻辑表达式

P8816 [CSP-J2022] 上升点列

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: CSP-J 第二轮考试的考点包括: 1. 数据结构:二叉树、图、堆、并查集等。 2. 算法:排序、查找、回溯、动态规划等。 3. 计算机网络:TCP/IP 协议、HTTP 协议、DNS 协议等。 4. 操作系统:进程、线程、死锁、虚拟内存等。 5. 计算机组成原理:CPU、内存、I/O 设备等。 6. 数据库:SQL、数据模型、数据库设计等。 7. 编程语言:Java、C++、Python 等。 这些考点是 CSP-J 第二轮考试的主要内容,具体考试内容以官方通知为准。 ### 回答2: CSP-J(中国计算机软件能力认证)是中国计算机技术职业资格认证中的一个项目,第二轮考试主要是针对Java语言的能力测试。在CSP-J第二轮考试中,主要有以下几个考点: 1. Java语言基础知识:包括Java的语法、关键字、标准类库等方面的知识点。考察学员对Java基本语法的掌握程度和使用能力。 2. 面向对象编程:考察学员对面向对象编程思想的理解和应用能力,包括类的定义、继承、多态、封装等方面的知识。 3. Java核心类库:考察学员对Java核心类库的熟悉程度和使用能力,包括集合类、IO操作、线程、异常处理等方面的知识。 4. 数据库操作:考察学员对Java语言与数据库的交互能力,包括对SQL语句的理解、数据库连接的建立、数据查询与更新等方面的知识。 5. 网络编程:考察学员对Java网络编程的理解和应用能力,包括TCP/IP协议、Socket编程、HTTP协议等方面的知识。 6. 设计模式:考察学员对常用设计模式的理解和应用能力,包括单例模式、工厂模式、观察者模式等方面的知识。 以上是CSP-J第二轮考试的主要考点,通过考试可以评估学员在Java语言方面的能力水平。为了取得优异的成绩,建议学员在这些考点上进行充分的准备和学习。 ### 回答3: CSP-J(程序设计能力全国联赛初级组)第二轮的考点相对于第一轮更加深入和复杂。以下是第二轮考点的介绍: 1. 数据结构:第二轮中,数据结构的考点是非常重要的。主要涉及树、图和其他常见数据结构,例如堆、栈和队列等。在这一部分,考生需要熟练掌握这些数据结构的特点、实现方法和应用场景。 2. 算法设计与分析:第二轮中,考生需要展示设计和分析高效算法的能力。这包括使用递归、贪心、动态规划、回溯、分治等算法思想解决问题的能力。考生需要对不同算法的时间复杂度和空间复杂度有较好的理解,并能够分析算法的优劣性。 3. 编程思维和技巧:在第二轮考试中,考生需要展示他们的编程思维和技巧。这包括对问题进行建模和抽象的能力,合理使用数据结构和算法的技巧,以及处理边界情况和异常情况的能力。 4. 综合应用题:第二轮的考试通常包含综合应用题,要求考生综合运用前面所学的知识解决实际问题。这类题目可能与现实生活中的问题相关,需要考生能够将问题转化为计算机程序,并给出正确有效的解决方案。 总体而言,CSP-J第二轮考点更加深入和复杂,需要考生具备扎实的数据结构和算法基础,以及良好的编程能力和解决问题的思维能力。需要进行更多的实践和练习,提升自己的编程水平和解题能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ypeijasd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值