奇怪的數列
題目描述
奇怪的數列
從 X 星截獲一份電碼,是一些數字,如下:
13
1113
3113
132113
1113122113
??
YY 博士經徹夜研究,發現了規律:
第一行的數字隨便是什么,以后每一行都是對上一行"讀出來"
比如第 2 行,是對第 1 行的描述,意思是:1 個 1,1 個 3,所以是:1113
第 3 行,意思是:3 個 1,1 個 3,所以是:3113
請你編寫一個程序,可以從初始數字開始,連續進行這樣的變換。
輸入描述
第一行 輸入一個數字組成的串,不超過 100 位。
第二行,一個數字?n,表示需要你連續變換多少次,n?不超過 20。
輸出描述
輸出一個串,表示最后一次變換完的結果。
輸入輸出樣例
示例
輸入?
5
7
輸出
13211321322115
運行限制
- 最大運行時間:1s
- 最大運行內存: 512M
我的解答:
import java.util.Scanner;
// 1:無需package
// 2: 類名必須Main, 不可修改public class Main {/*** 計算傳入字串第一個字符連續出現的個數*/private static int countNum(String s){int cnt=1;// 獲取字符串第一個字符char c = s.charAt(0);for(int i=1;i<s.length();i++){if(c == s.charAt(i)){cnt++;}else{break;}}return cnt;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此輸入您的代碼...// 初始化結果字符串String result = new String();// m 不超過100String m = scan.next();// n 不超過 20int n = scan.nextInt();// 經過 n 次變換for(int i=1;i<=n;i++){StringBuilder temp = new StringBuilder();for(int j=0;j<m.length();){// 需要處理的子串String subString = m.substring(j);// 拿到當前數字char subChar = subString.charAt(0);// 拿到m中前面數字的長度int cnt = countNum(subString);// 追加當前數字出現的個數temp.append(cnt);// 追加當前數字temp.append(subChar);j+=cnt;}m = temp.toString();result = m;}System.out.println(result);scan.close();}
}
特殊日期
問題描述
對于一個日期,我們可以計算出年份的各個數位上的數字之和,也可以分別計算月和日的各位數字之和。請問從?19001900?年?11?月?11?日至?99999999?年?1212?月?3131?日,總共有多少天,年份的數位數字之和等于月的數位數字之和加日的數位數字之和。
例如,20222022?年?1111?月?1313?日滿足要求,因為?2+0+2+2=(1+1)+(1+3)2+0+2+2=(1+1)+(1+3)?。
請提交滿足條件的日期的總數量。
答案提交
這是一道結果填空的題,你只需要算出結果后提交即可。本題的結果為一個整數,在提交答案時只填寫這個整數,填寫多余的內容將無法得分。
運行限制
- 最大運行時間:1s
- 最大運行內存: 256M
import java.util.Scanner;
// 1:無需package
// 2: 類名必須Main, 不可修改public class Main {/*** 通過 month 獲取日期*/private static int getDayByMonth(int year,int month){// 二月的天數int febDay;febDay = (year%4==0 && year%100!=0 || year%400==0)? 29 : 28;switch(month){case 1: case 3:case 5:case 7:case 8:case 10:case 12:return 31;case 4:case 6:case 9:case 11:return 30;case 2:return febDay;}return febDay;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);int cnt=0;//在此輸入您的代碼...for(int year=1900;year<9999;year++){for(int month=1;month<=12;month++){for(int day=1;day<=getDayByMonth(year,month);day++){if(year/1000 + year%1000/100 + year%100/10 + year%10 == month/10 + month%10 + day/10 + day%10 ){cnt++;}}}}System.out.println(cnt);scan.close();}
}
感覺挺簡單的,沒什么難度。