A.不可以,总司令
题目:
扶苏当上了星战地球舰队的参谋长,但是她不太聪明。
人工智能计算出,如果扶苏在一直回答“NO”的话,她在战役中判断完全正确的概率为 x%;如果她一直在回答“YES”的话,她在战役中判断完全正确的概率是 y%。
注意可能 x+y!=100,因为还存在她需要既回答“YES”也回答“NO”的情况,但是这一概率并不重要,因为她并不聪明,只能在全回答“YES”和全回答“NO”之中做一个选择。
扶苏自然希望做出的判断能尽可能准确,如果一直说“NO”的判断正确概率较高,她会一直回答“NO”;如果一直说“YES”的判断正确概率较高,她会一直回答“YES”。现在,给出这两者的概率,请你确定她应该回答 YES 还是 NO。
如果回答“YES”和“NO”的正确概率一样高,请你输出 “equal probability”
思路:
输入两个数,前面的大就输出“NO”,后面的大就输出“YES”,如果相等就输出“equal probability”
代码:
点击查看代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int x,y;
x=scanner.nextInt();
y=scanner.nextInt();
if(x<y) {
System.out.println("YES");
}else if(x>y) {
System.out.println("NO");
}else if(x==y) {
System.out.println("equal probability");
}
scanner.close();
}
}
B.计算
题目:
给定一个 3 位整数 n,计算:
n 的各位数字之和;
n 的各位数字之和的平方;
n 的各位数字之和的立方;
代码
点击查看代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int one,ten,hun;
int sum,sum2,sum3;
one = n%10;
ten = n/10%10;
hun = n/100;
sum=one+ten+hun;
sum2=sum*sum;
sum3=sum2*sum;
System.out.println(sum);
System.out.println(sum2);
System.out.println(sum3);
scanner.close();
}
}
D.数字口袋
题目:
小 A 有一个口袋,里面可以装整数。他从 1 开始,按从小到大的顺序,依次将每个整数装入口袋。
但是口袋是有限的,大小为 n,这就是说,口袋里所有的数字的和不能够超过 n。
思路:
从1开始加,当和大于n的时候停下来即可。
代码:
点击查看代码
import java.util.Scanner;
public class MainD {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int sum=0;
int mark=0;
for(int i=1;i<=n+1;i++) {
sum+=i;
if(sum>n) {
mark = i-1;
break;
}
}
for(int i = 1;i<=mark;i++) {
System.out.println(i);
}
scanner.close();
}
}
E.狠狠地切割(简单版)
题目:
精简后的题目:
给出两组数,第二组数不可以有重复的,在第一组数中,如果出现了第二组数中出现了的数,该数就是切割点,剩余的数可以一个或者多个组成片段,求最后片段的个数。注意这个题的输入规模会很大!
思路:
这个题总共分为两步:第一步是找到切割点,第二步是数片段。
第一步找切割点的话用二分查找才行,因为这道题的输入规模很大,我暂时还没有掌握,用的很一般的O(n^2)的方法,所以无法通过最后三个测试点,后面掌握了二分查找再尝试。找到切割点后,将切割点改为0作为标志。
第二步数片段,需要遍历一遍数组,如果i非0,并且i的下一个数为0的话,这就是一个片段,那么片段数就加一。当然这并没有考虑到最后一个片段的情况,如果最后一个数是0那就没有片段了;如果不是,就存在最后一个片段。
代码(太大的输入规模过不了,但大概应该是这个思路,就是要用二分查找才可以):
点击查看代码
import java.util.Scanner;
public class MainE {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
int result = 0;
long[] narr = new long[n];
long[] marr = new long[m];
for(int i=0;i<n;i++) {
narr[i] = scanner.nextLong();
}
for(int j = 0;j < m;j++) {
marr[j] = scanner.nextLong();
}
for(int i = 0;i<n;i++) {
for(int j = 0;j<m;j++) {
if(narr[i]==marr[j]) {
narr[i] = 0;
break;
}
}
}
int count = 0;
for(int i = 0;i < n-1;i++) {
if(narr[i]!=0) {
if(narr[i+1]==0) {
count++;
}
}
}
if(narr[n-1]!=0) {
count++;
}
System.out.println(count);
}
}
F.旋转排列
题目:
我们称一个数列 p 是一个长度为 n 的排列,当且仅当 p 满足如下条件:
p 的长度为 n;
1, 2, 3, … n 这 n 个数在 p 中均恰好出现一次。
题目描述
对于一个排列 p,定义一次“shift”操作是指:将 p 里的每一个数字都依次向后移动一位,并把 p 的最后一个数字移动到开头去。
例如,若排列 p 初始时为 [1,4,2,3],则“shift”一次以后将变为 [3,1,4,2]。
现在,给定一个长度为 n 的排列 p,请你按照如下规定循环操作:
对当前的排列 p 做一次“shift”操作;
输出本次“shift”以后的排列 p;
判断排列 p 的最后一个数字是否是 n,如果是,则结束循环操作;否则回到 1 继续操作。
提示:请严格按照题目给出的顺序进行循环操作。
思路:
这道题我首先想到的是用两个数组,后面只需要一个变量存储最后一个数,数组除最后一个数字其他依次向后移一位即可,直到最后一个为n。但是这个方法用java写会超时,用C写不会。
代码:
点击查看java代码
public class MinaJ {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] arr = new int[n];
for(int i = 0;i < n;i++) {
arr[i] = scanner.nextInt();
}
int count=0;
int j=0;
while(n!=0) {
count = 0;
for(int i = n-1; count<arr.length; i=(i+1)%arr.length) {
System.out.print(arr[i]+" ");
count++;
}
n--;
j++;
System.out.println();
if(arr[n+j-1]==n+j) {
break;
}
}
}
}
点击查看C语言代码
#include<stdio.h>
int main(){
int n,i;
scanf("%d",&n);
int arr[2000];
for(i = 0;i<n;i++){
scanf("%d",&arr[i]);
}
while(1){
int last = arr[n-1];
for(i=n-2;i>=0;i--){
arr[i+1] = arr[i];
}
arr[0] = last;
for(i=0;i<n;i++){
printf("%d ",arr[i]);
}
printf("\n");
if(arr[n-1]==n){
break;
}
}
}
G.标题计数
题目:
Markdown 是一种标记语言。在 Markdown 中,若一行的第一个非空白字符是井号(#),且紧跟着若干个空格,则这一行剩余的非空白内容将会按照一级标题渲染。
在本题范围内,下面的都是一级标题:
# This is a title
# This is another title
# This is also a title
# You#can#add#more#sharps
# #
在本题范围内,下面的都不是一级标题:
<h1>an HTML title</h1>
#You should insert a space
## This is a secondary title
aaaaa # This is not a title at all
#
You should add something after the sharp sign
思路:
这道题主要是弄清什么是一级标题,#是第一个非空白内容,#后必须要有一个空格,后面必须要有非空白内容才可以。首先找到第一个#,然后确认后面是空格,是的话就向前遍历,如果出现了其他字符就不是一级标题。
代码:
点击查看代码
public class MainK {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
scanner.nextLine();
int count=0;
String[] str = new String[n];
for(int i=0;i<n;i++) {
str[i] = scanner.nextLine();
}
boolean flag = true;
for(int i=0;i<n;i++) {
flag = true;
for(int j = 0;j<str[i].length()-1;j++) {
if(str[i].charAt(j)=='#'&&str[i].charAt(j+1)==' ') {
if(str[i].charAt(str[i].length()-1)!=' ') {
for(int k = j;k>=0;k--) {
if(str[i].charAt(k)!=' '&&str[i].charAt(k)!='#') {
flag = false;
break;
}
}
if(flag) {
count++;
}
break;
}
}else if(str[i].charAt(j)=='#'&&str[i].charAt(j+1)!=' ') {
break;
}
}
}
System.out.println(count);
}
}