蓝桥杯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));}}}
积木大赛
链接: 积木大赛.