华南师范机试15

一、大小写字母转换

public static void main(String[] args) {
    Scanner sc =new Scanner(System.in);
    String str = sc.nextLine();
    char[] nums = str.toCharArray();

    for (int i = 0; i < nums.length; i++) {
        if(nums[i]<=91 && nums[i] >=65){
            nums[i] = (char) (nums[i] + 32);
            continue;
        }
        if(nums[i] >= 97 && nums[i]<=123){
            nums[i] = (char) (nums[i] - 32);
            continue;
        }

    }
    for (char num : nums) {
        System.out.print(num);
    }

}

二、回文数判断回文数输入n,若不是回文数,则将n反转和n求和得到新的n,再判断n是否为回文数,问几次这样的操作可以使得最开始的n变成回文数。注意 ,判断回文数只要翻转 后时候与源数字一样即可判断

public static void main(String[] args) {
    //二、回文数判断回文数输入n,若不是回文数,则将n反转和n求和得到新的n,再判断n是否为回文数,
    // 问几次这样的操作可以使得最开始的n变成回文数。
    // 注意 ,判断回文数只要翻转 后时候与源数字一样即可判断
    Scanner sc = new Scanner(System.in);
    char[] shuzu = sc.nextLine().toCharArray();

    boolean flag = isFlag(shuzu);
    if(flag){
        System.out.println("是回文数");
    }else {
        int num = bianChengHuiWen(shuzu,0);
        System.out.println(num);
    }

    
}
//把数字变成回文数,用递归
private static int bianChengHuiWen(char[] shuzu,int num) {
    num++;
    String str = "";
    String str1 = "";
    for (char c : shuzu) {
        str = c+str;
        str1 = str1+c;
    }
    int i = Integer.parseInt(str);
    int j = Integer.parseInt(str1);
    int sum1 = i+j;
    String sum = sum1+"";
    if(isFlag(sum.toCharArray())){
        return num;
    }else {
        int a= bianChengHuiWen(sum.toCharArray(),num);
        return a;
    }
}
// 判断是不是回文数
private static boolean isFlag(char[] shuzu) {
    boolean flag = true;
    for(int i = 0; i< shuzu.length/2; i++){
        if(shuzu[i] != shuzu[shuzu.length-1-i]){
            flag = false;
            break;
        }
    }
    return flag;
}


三、约瑟夫环---递归的方法有点抽象,用标记数组实现时也要注意怎么运算。

public static void main(String[] args) {
    //三、约瑟夫环
    boolean[] nums = new boolean[32];
    int n = 0;//个数
    int i = 1;//下标

    while(n!=15){//没找到15个不出来

        int s = i % 31;//s能保证一定在30以内
        if(s == 0){ // 不要0
            s= s+1;
        }
        int k = 1; // k步长
        while(k <= 9){ // k 等于九的时候出来

            if(!nums[s]){ //保证这个数没有输出过
                if(k == 9) break;
                k++;//没有输出过则走一步有效,并且s++
                while (nums[s+1]){
                    s++;
                }
                if(s == 0){
                    s= s+1;
                } else s++;
            }else{//走一步没用,但是我要下标继续动
                s++;
            }
            s = s % 30;
        }
        if(s == 0){
            s= 30;
        }
        nums[s] = true;
        System.out.print(s+ " ");
        n++;
        i = s;

    }
}
  • 15
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值