当前位置: 代码迷 >> 综合 >> 蓝桥杯31天冲刺 Day8
  详细解决方案

蓝桥杯31天冲刺 Day8

热度:28   发布时间:2023-11-27 09:36:39.0

蓝桥杯31天冲刺 Day8

    • 神奇算式
    • 缩位求和
    • 积木大赛

神奇算式

链接: 神奇算式.
在这里插入图片描述
思路比较简单,无非就是列出所有位数的不同数字的组合(4个for循环),再用哈希表查重结果的每位数字,再统计

但是还是踩坑了,特别要注意:作为开头的数字不能为0!!!

代码:

public class 神奇算式 {
    public static void main(String[] args) {
    // TODO Auto-generated method stubint count1 = 0;int count2=0;int n=0;//所有四个数字不同的情况(i作为开头的数不能为0)for(int i =1;i<=9;i++) {
    for(int j =0;j<=9;j++) {
    if(j==i)j++;if(j>9)break;for(int k =0;k<=9;k++) {
    while(k==i||k==j)k++;if(k>9)break;for(int t =0;t<=9;t++) {
    while(t==i||t==j||t==k)t++;if(t>9)break;//1位数*3位数if(j!=0) {
    n=i*(100*j+10*k+t);if(n>1000&&n<9999&&isDifferent(n,i,j,k,t)) count1++;}//2位数*2位数if(k!=0) {
    n = (i*10+j)*(k*10+t);if(n>1000&&n<9999&&isDifferent(n,i,j,k,t)) count2++;}}}}}//count2除2是为了除重System.out.println(count1+count2/2);}public static boolean isDifferent(int n,int i ,int j,int k,int t) {
    int[] hash = new int[10];hash[n/1000]++;hash[n%1000/100]++;hash[n%100/10]++;hash[n%10]++;if(hash[i]==1&&hash[j]==1&&hash[k]==1&&hash[t]==1)return true;return false;}}

缩位求和

链接: 缩位求和.
在这里插入图片描述
在这里插入图片描述
由于输入不会超过1000位,最大不会超过9999,可以放心用int计算。直接把String转成char数组计算就好

代码:

import java.util.*;public class 缩位求和 {
    public static void main(String[] args) {
    // TODO Auto-generated method stubScanner sc = new Scanner(System.in);while(sc.hasNext()) {
    String s = sc.nextLine();int n=0;	for(char c : s.toCharArray()) {
    n+=c-'0';}while(n>=10) {
    int num=0;char[] chars =Integer.toString(n).toCharArray();for(int i=0;i<chars.length;i++) {
    num+=chars[i]-'0';}n=num;}System.out.println(Integer.toString(n));}}}

积木大赛

链接: 积木大赛.
在这里插入图片描述