CSDN编程竞赛-第六期(下)

CSDN编程竞赛报名地址:https://edu.csdn.net/contest/detail/16

努力是为了让自己不平庸:

前言/背景

四道题都是相关字符串的,思路很好想,但是需要熟练使用,不能有小错误。

大赛简介

有很多的实体奖励

参赛流程

活动时间:9月8日-21日(竞赛时间截止9.18)

竞赛考试时间:9月18日 8:30-11:00(作答时间2小时)

获奖名单公布:9月23日,在本页面公布获奖名单链接

获奖用户信息收集:9月27日

奖品发放:9月30日后7个工作日内

参赛经历

早起,提前洗漱完毕,等待竞赛开始就直接进入

三、收件邮箱

题目

已知字符串str,str表示邮箱的不标准格式。 其中”.”会被记录成”dot”,”@”记录成”at”。 写一个程序将str转化成可用 的邮箱格式。(可用格式中字符串中除了开头结尾所有”dot”,都会被转换,”at”只会被转化一次,开头结尾的不转化)

解题思路

因为是转换网站字符串,所以很容易就想到了java字符串里的contains函数和replace函数

先判断字符串是否含有“at”如果有就用replace把at替换为“@”,在判断是否含有“dot”如果有就用replace把at替换为“.”然后输出str

代码

package text;

import java.util.Scanner;

public class Three {
	public static void main(String[] args) {
		String str;
		Scanner sc=new Scanner(System.in);
		str=sc.next();
		if(str.contains("at")){
			str=str.replace("at","@");
			}
			if(str.contains("dot")){
			str=str.replace("dot",".");
			}
			System.out.println(str);
	}
}

运行结果

 四、最长递增的区间长度

 题目

给一个无序数组,求最长递增的区间长度。如:[5,2,3,8,1,9] 最长区间 2,3,8 长度为 3

解题思路

先定义一个数组将输入的数存入数组里,因为是递增,计算前一个数比后一个数比较小的次数,每次循环计数加1,如果前一个数比后一个数比较大,则结束本次计算,拿计数和结果比较如果比它大就把计数赋值结果,重新开始计数,直到数组轮完,因为我们计算的是比较次数,题中要的是长度,所以在输出的时候结果还需要加1

代码

#include <stdio.h>
#include <string.h>

int main() {
	int n;
	int count = 0;
	int result = 0;
	scanf("%d", &n);
	int a[n];

	for (int i = 0; i < n; i++) {
		scanf("%d", &a[i]);
	}

	for (int i = 0; i < n; i++) {
		count++;

		if (a[i] > a[i + 1])
			count = 0;

		if (count > result) {
			result = count;
		}
	}

	printf("%d", result + 1);
	return 0;
}

运行结果

 

经验心得

要多多练习,多多刷题,熟练的使用算法。

总结

本次竞赛重在练习字符串,希望大家熟练掌握字符串的用法

斯特林数作为组合数学中的一个重要概念,在编程竞赛中对于解决子集划分问题有着广泛的应用。为了深入理解斯特林数在实际编程中的应用,并掌握相关的编程技巧,推荐阅读《CSP-J初赛复习:排列组合与信息技术竞赛解析》一文。在这篇文章中,你可以找到关于斯特林数的详细定义、性质以及它们在编程题中的具体应用方式。 参考资源链接:[CSP-J初赛复习:排列组合与信息技术竞赛解析](https://wenku.csdn.net/doc/2xe56bf05t) 子集划分问题是指将一个集合划分为若干个非空子集的问题。在CSP-J和NOIP等竞赛中,这类问题往往要求参赛者编写程序来找出所有可能的划分方式。使用斯特林数可以有效地计算特定数量的对象被划分为特定数量的非空子集的总数。 编程实现上,首先需要理解第二类斯特林数的计算方法。可以通过递归公式或者动态规划的方式来求解第二类斯特林数。一个递归的示例代码如下: ```python def S(n, k): if n == k == 0: return 1 if k == 0 or n == 0: return 0 if memo[n][k] != -1: return memo[n][k] memo[n][k] = S(n - 1, k - 1) + k * S(n - 1, k) return memo[n][k] ``` 在上述代码中,`S(n, k)`表示第二类斯特林数,表示将n个不同的对象划分成k个非空子集的方法数。通过构建一个二维数组`memo`来缓存中间结果,可以显著提高计算效率。 接下来,可以将斯特林数应用于子集划分的算法中。在编程实现中,可以结合具体题目要求,使用递归或迭代的方式进行子集的生成,并利用斯特林数进行结果的计数。 通过掌握斯特林数和子集划分问题的解决方法,参赛者将能够在编程竞赛中更加灵活地处理复杂的组合问题,从而在编程题中取得更好的成绩。如果想要更深入地了解相关知识,可以继续阅读《CSP-J初赛复习:排列组合与信息技术竞赛解析》中的其他部分,以获得更全面的理解和更多的实战技巧。 参考资源链接:[CSP-J初赛复习:排列组合与信息技术竞赛解析](https://wenku.csdn.net/doc/2xe56bf05t)
评论 35
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天寒雨落

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

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

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

打赏作者

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

抵扣说明:

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

余额充值