算法复习一

在这里插入图片描述
算法复习,蓝桥杯真题一:
前N行用scanner.nextLine()读取,后面的字符串用scanner.next()分别读取。

注意事项:
输出时str[k]要从k= 1开始,否则会多输出一行空格,报格式错误,因为输入的第一行n不用输出且没有读取到str[]中。

import java.util.Scanner;
public class Main {
 public static void main(String[] args) {
  Scanner scanner = new Scanner(System.in);
  int n = scanner.nextInt();
  int i = 0;
  int k = 1;
  String str[] = new String[1000];
  while(scanner.hasNext()){
   for(; i < n+1; i++){
    str[i] = scanner.nextLine();
   }
   str[i] = scanner.next();
   i++;
   while(k < i){
    System.out.println(str[k]+"\n");
    k++;
   }   
  }  
 }
}

在这里插入图片描述

蓝桥杯真题二:
这个挺好理解的

import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int f=1;//记录每行第一个数
        int counter=n;//记录每行个数
        for(int i=1;i<=5;i++) {
            int t=0;
            f=f+i-1;//每行数等于上一行的行数+上一行首元素
            t=f;
            System.out.print(f+" ");
            for(int j=1;j<counter;j++) {
                t=t+j+i;//每行的元素值
                System.out.print(t+" ");
            }
            counter--;//每行元素值减1
            System.out.println();
        }
    }
}

在这里插入图片描述
14年蓝桥杯分糖果题:
1,首先将原本糖果个数和要给左边孩子的糖果个数分为两个数组分别为ar1[i]和ar2[i],ar2[i]为ar1[i]的1/2,ar1[i]变为1/2表示有一半糖果被移走,为下一步与左边孩子分
到的糖果ar2[i]进行相加做好铺垫。
2,第一个循环把自己要分给左边孩子的糖储存进ar2[i]中,然后自身的值/2,不过因为 小朋友是围圈坐在一起的,所以最后一位孩子要给第一位孩子糖果,所以要设置个if,当到最后一位时候,让他去给第一位孩子糖果。
3,第二个循环是加上旁边孩子给的糖果,因为我们把要拿到的糖果储存到了ar2里面,所以这里直接相加就好。
4、最后判断糖果的个数,糖果个数为奇数孩子的糖果数目+1,使其变为偶数。然后判断孩子手里的糖是否相等,因为我们在循环开头就让boo = false,这样到后面判断时候,孩子手里面的糖不相等的时候就让boo = true 继续执行。如果相等就会停止循环。

import java.util.Scanner;
public class Main{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] ar1 = new int[n];
        int[] ar2 = new int[n];
        for (int i = 0; i < n; i++) {
            ar1[i] = sc.nextInt();
        }
        boolean boo = true;
        int sum = 0;   // 补发的棒棒糖
        while (boo){
            boo = false;
            for (int i = 0; i < n; i++) { // 把要给左边小朋友的糖保存在ar2里面,然后自身糖果减半 = ar1[i]/2。
                if (i == n-1){
                    ar2[0] = ar1[i]/2;
                    ar1[i] = ar1[i]/2;
                }else {
                    ar2[i+1] = ar1[i]/2;
                    ar1[i] = ar1[i]/2;
                }
            }
            for (int i = 0; i < n; i++){ //  把旁边小朋友给的糖果加上
                ar1[i] += ar2[i];
            }
            for (int i = 0; i < n; i++) { // 判断小朋友手里的糖果是否为奇数,是的话sum加一
                if (ar1[i]%2 != 0){
                    ar1[i] += 1;
                    sum += 1;
                }
                if (ar1[0] != ar1[i]){ // 判断小朋友手里面的糖果是否相等
                    boo = true;
                }
            }
        }
        System.out.println(sum);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值