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);
                }
                
            }
        }
    }
}
最后修改:2022 年 09 月 18 日
如果觉得我的文章对你有用,请随意赞赏