T1
第一题(文件命名T1)
有奖猜谜
小明很喜欢猜谜语。
最近,他被邀请参加了X星球的猜谜活动。
每位选手开始的时候都被发给7个电子币。
规则是:猜对了,手里的电子币数目翻倍,
猜错了,扣除5个电子币, 扣完为止。
小明一共猜了n条谜语。Ps:n为字符串长度
战果为:vxvxv.....xvxvx(一个仅含v和x的字符串)
其中v表示猜对了,x表示猜错了。
请你计算一下,小明最后手里的电子币数目是多少。
例如:
输入:vxvx
输出:13
//法一 暴力破解
public static void f1(){
int all=7;
Scanner sc = new Scanner(System.in);
String str = sc.next();
int n = str.length();
String nick =null;
for(int i=0;i<n;i++){
if(all>0){
nick = str.substring(i, i+1);
if(nick.equals("v")){
all +=all;
}else if(nick.equals("x")){
all -=5;
}
}else{
System.out.println("钱已经小于零了");
break;
}
}
System.out.println(all);
}
public static int coin=7;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String s=sc.nextLine();
char c[]=s.toCharArray();
for(int i=0;i<c.length;i++)
{
if(c[i]=='v') {
coin*=2;
}else {
coin-=5;
}
}
System.out.println(coin);
}
T2
第二题(文件命名T2)
煤球数目
有一堆煤球,堆成三角棱锥形。具体:
第一层放1个,
第二层3个(排列成三角形),
第三层6个(排列成三角形),
第四层10个(排列成三角形),
....
如果一共有n层,共有多少个煤球?
请输出表示煤球总数目的数字。
例如:
输入:4
输出:20
//这个都不值得写,太简单了
//有两种方法
//1.
int all=0;
for(int i=1;i<=n;i++){
all+=(i*(i+1)/2);
}
//2.
int all=0;
int a=0;
for(int i=1;i<=n;i++){
a+=i;
all+=all;
}
T3
第三题(文件命名T3)
数字循环圈
如果把一个正整数的每一位都平方后再求和,得到一个新的正整数。
对新产生的正整数再做同样的处理。
如此一来,你会发现,不管开始取的是什么数字,
最终如果不是落入1,就是落入一个循环圈。
输入任意一个数字n;
请写出这个n所对应的进入循环圈的入口
例如:
输入:2
输出:4
原因:2-->4-->16-->37-->58-->89-->145-->42-->20-->4(循环)
public static String get(String str,int n) {
int all=0;
int a;
for(int i=0;i<n;i++){
a=Integer.parseInt(str.substring(i,i+1));
all+=a*a;
}
String str1= Integer.toString(all);
return str1;
}
public static boolean f(int[] a,int n){
int i=0;
if(n==0) return true;
while(i<=n-1){
if(a[n]==a[i]) return false;
i++;
}
return true;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String str = sc.next();
int n = str.length();
int[] a = new int[100];
String next;
int m=0;
a[0]=Integer.parseInt(str);
System.out.print(a[0]);
while(f(a, m)){
next =get(str,n);
str = next;
n=next.length();
a[m+1]=Integer.parseInt(next);
if(a[m+1]==1) break;
m++;
System.out.print("-->"+a[m]);
}
}
T4
第四题(文件命名T4)
凑算式
这个算式中A~I代表1~9的数字,不同的字母代表不同的数字。
比如:
6+8/3+952/714 就是一种解法,
5+3/1+972/486 是另一种解法。
这个算式一共有多少种解法?
请输出所有解法算式!
解法
这个链接有两种解法一种是暴力破解,还有一种dfs
public static int arr[]= {1,2,3,4,5,6,7,8,9};
public static void f(int k)
{
if(k==arr.length) {
check();
}
for(int i=k;i<arr.length;i++)
{
int t=arr[i];
arr[i]=arr[k];
arr[k]=t;
f(k+1);
t=arr[i];
arr[i]=arr[k];
arr[k]=t;
}
}
public static void check() {
if((arr[1]*(arr[6]*100+arr[7]*10+arr[8])+arr[2]*(arr[3]*100+arr[4]*10+arr[5]))%(arr[2]*(arr[6]*100+arr[7]*10+arr[8]))==0)
{
if((arr[1]*(arr[6]*100+arr[7]*10+arr[8])+arr[2]*(arr[3]*100+arr[4]*10+arr[5]))/(arr[2]*(arr[6]*100+arr[7]*10+arr[8]))+arr[0]==10)
{
System.out.println(arr[0]+"+"+arr[1]+"/"+arr[2]+"+"+arr[3]+""+arr[4]+""+arr[5]+"/"+arr[6]+""+arr[7]+""+arr[8]);
}
}
}
public static void main(String[] args) {
f(0);
}