【CSDN竞赛第四期】编程赛后总结与分享

【CSDN竞赛第四期】编程赛后感

在这里插入图片描述
先放成绩:77.5分,除去作弊的人排名**【15/951】**
在这里插入图片描述谈不上满意,毕竟还有可以进步的空间,希望下次更好。下面进入正题:

1.小玉家的电费

【题目描述】
夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上 面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400 千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一 下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费 应该是多少。
【思路】
对不同梯度的电量进行计算,直接使用if分支进行处理即可,题目较为简单,难度系数低,但题目给出是double类型数据,要求输出float类型,需要注意精度问题。
【解答】

import java.util.ArrayList;
import java.util.Scanner;
class Main {
    
    
public static void main(String[] args) {
    
    
		Scanner scan = new Scanner(System.in);
		String str_0 = scan.nextLine().trim();
		int amount = Integer.parseInt(str_0);
		scan.close();
		double result = solution(amount);
		String s=String.format("%.1f",result);
		double ss=Double.parseDouble(s);
		System.out.println(ss);
}
public static double solution(int amount){
    
    
		double result = (float)0.0;
		if(amount<=150){
    
    
				result=amount*0.4463;
		}else if(amount>150 && amount<=400){
    
    
				result=150*0.4463+(amount-150)*0.4663;
		}else if(amount>400){
    
    
		result=150*0.4463+250*0.4663+(amount-400)*0.5663;
		}
		return result;
	}
}

【结果】
在这里插入图片描述

2.单词逆序

【题目描述】
对于一个字符串,请设计一个算法,只在字符串的单词间做逆序调整,也就是说,字符串由一些由空格分隔的部分组成, 你需要将这些部分逆序。 给定一个原字符串A,请返回逆序后的字符串。例,输入”I am a boy!“输出”boy! a am I“
【思路】
逆序输出单词,但不是逆序输出整个字符串,所以先将单词分割,人后翻转输出即可,难度低,对不熟悉字符串操作的难度可能比较大,需要熟练掌握String的方法。
【解答】

class Solution {
    
    
	solution(str) {
    
    
			var result;
			var str;
			result=str.split(" ").reverse();
		return result;
	}
}
		var str_0 = readline().trim();
		var str = str_0;
		let sol = new Solution();
		result = sol.solution(str);
		print(result.join(" "));

【结果】
在这里插入图片描述

3.小Q整数分割

【题目描述】
小Q决定把一个整数n,分割为k个整数。 每个整数必须大于等于1。 小Q有多少方案
【思路】
使用dp处理,对每次的分割进行迭代,难度中,由于官方给出的实例测试错误,后来才更改,修改后一直都是报运行无法提交,其实没有问题。忘记了剪枝操作,最后报告显示只过了80%,小伤心,这题测试花了很久,其实一直都是对的。。。
【解答】

#include<iostream>
using namespace std;
int main()
{
    
    
	int n,k;
	cin >> n >> k;
	int dp[102][102];
	dp[0][0] = 1;
	int i,j;
	for(i=1;i<=n;i++)
		for(j=1;j<=k;j++){
    
    
		if(i>=j){
    
    
			dp[i][j] = dp[i-j][j] + dp[i-1][j-1];
			}
		}
	cout << dp[n][k] << endl;
	return 0;
}

【结果】
在这里插入图片描述

4.新型美丽数列

【题目描述】
定义美丽数列A: 1. 数列中相邻的数越是靠内相对大小加一,a[2]=a[1]+1,a[n-2]=a[n-1]+1… 2. 距离边缘距离相等的 数的大小相等:a[0] = a[n-1],a[1] = a[n-2]… 通过修改最小的数字使得给定数列变成美丽数列。 修改后的值必须仍是正整数。
【思路】
感觉是需要从两端搜索,然后进行剪枝处理,最后使用贪心的思想,找到修改最小的数字,使得数列变为新型美丽数组。难度中,花点时间应该是可以完成的,比赛当时没写完就到时间了,最终报告只显示过了30%
【结果】
在这里插入图片描述

小结

总的来说,题目难度适中,但比赛环境希望可以进行优化,测试样例建议多人测试,确保正确,答题页面提供标准模板时不做输出,让选手自己写,强制使用数组和集合输入可能还需要花时间去理解下,对于复制代码检测,应该对是否切出屏幕首先做判断,然后才对是否复制粘贴代码做检测,不然自己复制自己的代码也会出现检测复制。希望下次继续加油,再进一步。

猜你喜欢

转载自blog.csdn.net/dxcn01/article/details/126561486