First
小易準備去魔法王國采購魔法神器,購買魔法神器需要使用魔法幣,但是小易現在一枚魔法幣都沒有,但是小易有兩臺魔法機器可以通過投入x(x可以為0)個魔法幣產生更多的魔法幣。
魔法機器1:如果投入x個魔法幣,魔法機器會將其變為2x+1個魔法幣
魔法機器2:如果投入x個魔法幣,魔法機器會將其變為2x+2個魔法幣
小易采購魔法神器總共需要n個魔法幣,所以小易只能通過兩臺魔法機器產生恰好n個魔法幣,小易需要你幫他設計一個投入方案使他最后恰好擁有n個魔法幣。
從n開始倒推,在兩個魔法機器之間選擇,期間一直保持為整數,直到n==0,得出的魔法機器字符標記存入數組,此時的順序為逆序,輸出時需要逆置.
#include<stdio.h>
int fun1(int x){
int t=(x-1)/2;
if((x-1)%2==0)
return t;
else return -1;
}
int fun2(int x){
int t=(x-2)/2;
if((x-2)%2==0)
return t;
else return -1;
}
int main(){
int need;
int i=0;
int j;
scanf("%d",&need);
char str[30];
while(need){
if(fun1(need)!=-1){
need=fun1(need);
str[i++]='1';
}
else if(fun2(need)!=-1){
need=fun2(need);
str[i++]='2';
}
}
for(j=i-1;j>=0;j--){
printf("%c",str[j]);
}
}
Second
為了得到一個數的"相反數",我們將這個數的數字順序顛倒,然后再加上原先的數得到"相反數"。例如,為了得到1325的"相反數",首先我們將該數的數字順序顛倒,我們得到5231,之后再加上原先的數,我們得到5231+1325=6556.如果顛倒之后的數字有前綴零,前綴零將會被忽略。例如n = 100, 顛倒之后是1.
此處為正整數的逆置
#include<stdio.h>
int main(){
int num;
int r=0;
scanf("%d",&num);
int f=num;
while(num){
r=r*10+num%10;
num=num/10;
}
printf("%d",(r+f));
}
Third
一個由小寫字母組成的字符串可以看成一些同一字母的最大碎片組成的。例如,"aaabbaaac"是由下面碎片組成的:'aaa','bb','c'。牛牛現在給定一個字符串,請你幫助計算這個字符串的所有碎片的平均長度是多少。
DecimalFormat 類主要靠 # 和 0 兩種占位符號來指定數字長度。0 表示如果位數不足則以 0 填充,# 表示只要有可能就把數字放在這個位置。
import java.util.Scanner;
import java.text.DecimalFormat;
public class Main{
public static void main(String [] args) {
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
float n=1;
for(int i=1;i<str.length();i++){
if(str.charAt(i)!=str.charAt(i-1)){
n++;
}
}
DecimalFormat df = new DecimalFormat("#.00");
System.out.println(df.format(str.length()/n));
}
}