数字涂⾊游戏代码JAVA_CCF签到汇总(JAVA版本,2013-
12~2018-12)
CCF签到题,没有提到分数的题⽬都是100分,不然会额外提出,样例输⼊都单独⽂本复制粘贴了,这样你们测试的时候很⽅便粘贴⽤例,不⽤⾃⼰⼿敲,都是⼀些签到题。但有好的基础,会多的数据结构,好的数学思想,那么这些都是⼀些很简单的问题。因为java版本不多,所以仅供参考,以下代码的思路都很简单,很多都直接通过题⽬⾯向过程,有更好的想法,或者你我有些题没有满分的改进⽅式都可以交流。
CCF300分的线,1、2题需要拿满,最低也要190,第三题是理解题,很多时候考你的语⽂能⼒更多,第四题是规律性更强的题,涉及图论算法众多(最⼩⽣成树3题,通信⽹络,最优灌溉,数据中⼼,地铁修建)(最短路径4题,最优匹配,⽆线⽹络,交通规划,游戏)(欧拉图,强连通分⽀,最长路径也都考过),还有正则匹配的题(5题url映射,json查询,markdown,模板⽣成系统,字符中匹配),总⽽⾔之⼀句话,第4题规律性很强。你只需要1、2题拿满,第4题拿90,第五题和第三题通过理解之后,暴⼒得分,就能稳300分以上,不排除某年的题会难、杂,或者当年当⽉你不在巅峰,那就下⼀次再考,上⾯列举的题型出现的频率极⾼,针对1、2、4刷题性价⽐是最⾼的。
下⾯只提供了第⼀题和第⼆题,因为在线测试对java语⾔不太友好,导致我的3、4题分数参差不齐,所
以没有提供代码,⽹上有众多优秀的博客,输⼊试题编号和名称即可到,看看思路,⾃⼰再写⼀遍,算法之路,任重道远。(数学很重要,数学是编程的降维武器)
试题编号:201312-1
试题名称:出现次数最多的数
样例输⼊
6
10 1 10 20 30 20
样例输出
10
思路:解决⽅法有很多,要么空间够⼤开够,⽤下标去加加计数,或者⽤hashset⼀直塞,重复会返回default,然后default就对应加加,⽤indexof,唯⼀值,还可以⽤⼀个数组,在插⼊时注意排序,因为需要输出最⼩值,插⼊时就排好序,重复的就加加次数,总之⽅法很多。
importjava.util.Scanner;public classCCF201312_1 {public static voidmain(String[] args) {
Scanner sc=newScanner(System.in);int Int();int[] space=new int[n];for(int i=0;i
space[i]=sc.nextInt();
}int[] flag=new int[10000];for(int i=0;i
flag[space[i]]++;
}int max=0;int index=0;int finded=0;for(int i=0;i<10000;i++) {if(flag[i]!=0) { finded=finded+flag[i];
}if(flag[i]>max) {
max=flag[i];
index=i;
}if(finded==n) {break;
}
}
System.out.println(index);
}
}简单的java游戏代码
试题编号:201312-2
试题名称:ISBN号码
样例输⼊
0-670-82162-0
样例输出
0-670-82162-4
思路:问题描述中已经有具体步骤了,对于格式统⼀,下标固定的问题,基本数据结构掌握就可以解决。
importjava.util.Scanner;public classCCF201312_2 {public static voidmain(String[] args) {
Scanner sc= newScanner(System.in);
String Line();int ret = 1 * (sourse.charAt(0) - '0') + 2 * (sourse.charAt(2) - '0') + 3 * (sourse.charAt(3) - '0')+ 4 * (sourse.charAt(4) - '0') + 5 * (sourse.charAt(6) - '0') + 6 * (sourse.charAt(7) - '0')+ 7 * (sourse.charAt(8) - '0') + 8 * (sourse.charAt(9) - '0') + 9 * (sourse.charAt(10) - '0');
ret= ret % 11;if (sourse.charAt(12) == 'X') {//如果默认为X
if (ret == 10) {//匹配对
System.out.print("Right");return;
}else {//不匹配
for (int i = 0; i < sourse.length() - 1; i++) {
System.out.print(sourse.charAt(i));
}
System.out.print(ret);
}
}else {//默认不是X
if ((sourse.charAt(12) - '0') ==ret) {
System.out.print("Right");return;
}if (ret == 10) {for (int i = 0; i < sourse.length() - 1; i++) {
System.out.print(sourse.charAt(i));
}
System.out.print("X");return;
}else{for (int i = 0; i < sourse.length() - 1; i++) {
System.out.print(sourse.charAt(i));
}
System.out.print(ret);
}
}
}
}
试题编号:201403-1
试题名称:相反数
样例输⼊
5
1 2 3 -1 -2
样例输出
2
思路:给了范围,不会超过⼀千,⽤⼆维数组,正负分开在⼆维数组上加加,然后判断有多少对即可,⽤finded去记录到的数⽬,可以提前退出循环,提⾼速度。
importjava.util.Scanner;public classCCF201403_1 {public static voidmain(String[] args) {
Scanner sc=newScanner(System.in);int Int();int[] sourse=new int[N];int[][] flag=new int[1000][2];for(int i=0;i
sourse[i]=sc.nextInt();if(sourse[i]>0) {
flag[sourse[i]][1]++;
}else{
flag[-1*sourse[i]][0]++;
}
}int finded=0;int count=0;for(int i=0;i<1000;i++) {if(flag[i][0]>0||flag[i][1]>0) {
finded+=flag[i][0]+flag[i][1];
}if((flag[i][0]>flag[i][1])&&(flag[i][1]>0)) {
count+=flag[i][1];
}if((flag[i][1]>flag[i][0])&&(flag[i][0]>0)) {
count+=flag[i][0];
}if((flag[i][1]==flag[i][0])&&flag[i][1]>0) {
count+=flag[i][0];
}if(finded==N) {break;
}
}
System.out.println(count);
}
}
试题编号:201403-2
试题名称:窗⼝
样例输⼊
3 4
0 0 4 4
1 1 5 5
2 2 6 6
1 1
0 0
4 4
0 5
样例输出
2
1
1
IGNORED
样例说明
第⼀次点击的位置同时属于第 1 和第 2 个窗⼝,但是由于第 2 个窗⼝在上⾯,它被选择并且被置于顶层。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。