A 跳格子
题目描述
从左到右有N个台阶,每个台阶的高度为Hi,开始你可以随意选择一个台阶作为初始起点,每次你可以向右边 移动,当且仅当右边的台阶比你现在所在的台阶高度低,问你最多可以移动多少次。
输入描述
一个整数N(1<=N<=200000)
接下来一行有N个数Hi (1<=Hi<=1000000000)
输出描述
输出一个数,表示移动的最大次数。
样例输入
7
4 4 5 6 6 5 4
样例输出
2
java代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int []a=new int[1000000];//用于存放Hi
int []b=new int[1000000];
//输入n值
int n = scanner.nextInt();
for(int i=0;i<n;i++) {
a[i]=scanner.nextInt();
}
//下台阶
for(int i=1;i<n;i++) {
if (a[i]<a[i-1]) {
b[i]=b[i-1]+1;
}
}
int m=0;
for(int i=0;i<n;i++) {
m=Math.max(m, b[i]);
}
System.out.println(m);
}
}
C 我爱数学
题目描述
viewsetting特别喜欢数学,但是他算除法的时候特别不熟练,常常会出错。为了维持他对数学的兴趣,你能不能帮他做一下除法运算呢?
输入描述
第一行是一个整数T(T≤1000),表明数据组数。 每组数据包括一行的两个整数a、b,用空格隔开。输入保证在int的范围内,且保证运算合法。
输出描述
每组数据输出一行a÷b的值。保留6位小数。
样例输入
2
114 514
1919 810
样例输出
0.221790
2.369136
java代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int T=scanner.nextInt();
double a=0,b = 0;
for(int i=0;i<T;i++) {
a = scanner.nextInt();
b = scanner.nextInt();
//运用string的format方法保留6位小数
System.out.println(String.format("%.6f", a/b));
}
}
}
D 粉丝与汉诺塔
题目描述
苟利国家生死以,岂因福祸避趋之?作为ACM真正的粉丝,应该都听闻过汉诺塔问题,汉诺塔问题是这样的:
有三根柱子,编号A,B,C柱,初始情况下A柱上有n个盘子,小盘子在上大盘子在下,n个盘子大小各不一样,每次移动一个最上层的盘子算作一步,大盘子无法移动到小盘子上面,现在要把n个盘子从A柱全部移动到C柱,请问一共需要多少步?
现在对汉诺塔问题加以限制,每次移动只能经由中间柱实现,即是说如果想从A柱移动到C柱,只能A到B,然后B到C这样移动,反之亦然,那么请问,n个盘子从A柱全部移动到C柱一共需要多少步?
输入描述
多组输入,每组输入一个正整数n(1<=n<=18)
输出描述
每行输出一个正整数答案
样例输入
1
2
样例输出
2
8
java代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
while(scanner.hasNext()) {
int n = scanner.nextInt();
int res=0;
for(int i=0;i<n;i++) {
res=res + (res+1)*2;
}
System.out.println(res);
}
}
}
F 【C语言训练】自守数问题
题目描述
自守数是指一个数的平方的尾数等于该数自身的自然数。
例如:
25^2=625
76^2=5776
9376^2=87909376
请求出200000以内的自守数?
输入描述
输出描述
200000以内的自守数(包括0, 数之间用两个空格分开)
样例输入
样例输出
0 1 5 6 25 76 376 625 9376 90625 109376
java代码
public class Main {
public static void main(String[] args) {
for (int n = 0; n < 200000; n++) {
int n2 = n;
int m = 0;
//死循环
for (; ; ) {
//用来判断这个数是不是已经算尽了
if (n2 == 0) {
System.out.print(n+ " ");
break;
}
//取个位数 为k
int k = n2 % 10;
//m += k * n;
//个位数乘以原来的数,可以得到想要的数的尾部
//比如12*12=144 12*2=24
m = m + k * n;
//如果尾部与个位数不相匹配,直接退出
if (m % 10 != k) {
break;
}
//想要的数的最尾部去掉
m = m / 10;
//去掉n2的尾部
n2 = n2 / 10;
}
}
}
}
G 密码
题目描述
网上流传一句话:"常在网上飘啊,哪能不挨刀啊~"。其实要想能安安心心地上网其实也不难,学点安全知识就可以。
首先,我们就要设置一个安全的密码。那什么样的密码才叫安全的呢?一般来说一个比较安全的密码至少应该满足下面两个条件:
(1).密码长度大于等于8,且不要超过16。
(2).密码中的字符应该来自下面“字符类别”中四组中的至少三组。
这四个字符类别分别为:
1.大写字母:A,B,C...Z;
2.小写字母:a,b,c...z;
3.数字:0,1,2...9;
4.特殊符号:~,!,@,#,$,%,^;
给你一个密码,你的任务就是判断它是不是一个安全的密码。
输入描述
输入数据第一行包含一个数M,接下有M行,每行一个密码(长度最大可能为50),密码仅包括上面的四类字符。
输出描述
对于每个测试实例,判断这个密码是不是一个安全的密码,是的话输出YES,否则输出NO。
样例输入
3
a1b2c3d4
Linle@ACM
^~^@^@!%
样例输出
NO
YES
NO
java代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int m =scanner.nextInt();
for(int i=0;i<m;i++) {
String str = scanner.next();
int countup=0;
int countint=0;
int countlow=0;
int countts=0;
for(int j=0;j<str.length();j++) {
if ('A'<=str.charAt(j) && str.charAt(j)<='Z') {
countup=1;
}
else if ('a'<=str.charAt(j) && str.charAt(j)<='z') {
countlow=1;
}
else if ('0'<=str.charAt(j) && str.charAt(j)<='9') {
countint=1;
}
else if(str.charAt(j)=='~'||str.charAt(j)=='!'||str.charAt(j)=='@'||str.charAt(j)=='#'||str.charAt(j)=='$'||str.charAt(j)=='%'||str.charAt(j)=='^') {
countts=1;
}
}
int sum=countint+countlow+countup+countts;
if (sum==3||sum==4) {
System.out.println("YES");
}
else {
System.out.println("NO");
}
}
}
}
H 素数回文
题目描述
小王对既是素数又是回文的数特别感兴趣。比如说151既是素数又是个回文。现在小王想要你帮助他找出某个范围内的素数回文数,请你写个程序找出 a 跟b 之间满足条件的数。(5 <= a < b <= 100,000,000);
输入描述
输入a和b(5 <= a < b <= 100,000,000)
输出描述
按从小到大输出a,b之间所有满足条件的素数回文数
样例输入
5 500
样例输出
5
7
11
101
131
151
181
191
313
353
373
383
java代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int a=scanner.nextInt();
int b=scanner.nextInt();
for(int i=a;i<b;i++) {
int cout=0;
//判断素数
for(int j=2;j<i;j++) {
if (i%j==0) {
cout++;
}
if (cout==1) {//不是素数
break;
}
}
if (cout==0) {//i是素数
//转化为字符串
String str = String.valueOf(i);
StringBuffer s = new StringBuffer(str);
StringBuffer res = s.reverse();//反转字符串,用stringbuff接收
//再转化为字符串
String news=new String(res);
//转化为整型,以便比较
int newi=Integer.parseInt(news);
if (i==newi) {
System.out.println(i);
}
}
}
}
}