幾個有意思的演算法題(高斯日記、排它平方數、振興中華、顛倒的價牌)
阿新 • • 發佈:2019-01-16
大數學家高斯有個好習慣:無論如何都要記日記。
他的日記有個與眾不同的地方,他從不註明年月日,而是用一個整數代替,比如:4210
後來人們知道,那個整數就是日期,它表示那一天是高斯出生後的第幾天。這或許也是個好習慣,它時時刻刻提醒著主人:日子又過去一天,還有多少時光可以用於浪費呢?
高斯出生於:1777年4月30日。
在高斯發現的一個重要定理的日記上標註著:5343,因此可算出那天是:1791年12月15日。
高斯獲得博士學位的那天日記上標著:8113
請你算出高斯獲得博士學位的年月日。
提交答案的格式是:yyyy-mm-dd, 例如:1980-03-21
請嚴格按照格式,通過瀏覽器提交答案。
注意:只提交這個日期,不要寫其它附加內容,比如:說明性的文字。
分析:這實際就是“三天打魚、兩天晒網問題”。
程式實現:(java寫的)
- package Forth;
- publicclass DateOfNdays {
- /*
- * 高斯日記(給定日期,算出X天后的日期)
- */
- /*
- * 是否是閏年
- */
- boolean IsleapYear(int year){
-
return (year % 400 == 0 || year % 4 == 0 && year %
- }
- /*
- * 獲得某年某月的最大天數
- */
- int GetMaxDay(int year,int month,int day){
- switch(month){
- case1:
- case3:
- case5:
- case7:
- case8:
- case10:
- case12:
- return31;
-
case4:
- case6:
- case9:
- case11:
- return30;
- case2:
- return (IsleapYear(year)?29:28);
- default:
- return -1;
- }
- }
- /*
- * 獲得X天后的日期
- */
- void GetXDays(int year,int month,int day,int X){
- for(int i = 1; i <= X; i++){
- if(day != GetMaxDay(year,month,day)){
- day++;
- }else{
- if(month != 12){
- month++;
- day = 1;
- }else{
- month = day = 1;
- year++;
- }
- }
- }
- System.out.println(X+"天后的日期是"+year+"/"+month+"/"+day);
- }
- }
答案:1799-7-16
2.題目標題: 排它平方數
小明正看著 203879 這個數字發呆。
原來,203879 * 203879 = 41566646641
這有什麼神奇呢?仔細觀察,203879 是個6位數,並且它的每個數位上的數字都是不同的,並且它平方後的所有數位上都不出現組成它自身的數字。
具有這樣特點的6位數還有一個,請你找出它!
再歸納一下篩選要求:
1. 6位正整數
2. 每個數位上的數字不同
3. 其平方數的每個數位不含原數字的任何組成數位
答案是一個6位的正整數。
請通過瀏覽器提交答案。
注意:只提交另一6位數,題中已經給出的這個不要提交。
注意:不要書寫其它的內容(比如:說明性的文字)。
- package Forth;
- publicclass ExcludeNumber {
- /*
- * 排它平方數
- */
- long PingNum = 0; //儲存平方
- /*
- * 判斷一個數是否有重複數字
- */
- publicboolean IsSame(long x){
- long store[] = newlong[7];
- long r;
- int i = 0;
- while(x != 0){ //分離該數的每一位,存入store陣列
- r = x % 10;
- x = x / 10;
- store[i] = r;
- i++;
- }
- long result;
- for(int j = 0; j < 5; j++){ //判斷有無重複數
- result = store[j];
- for(int k = j+1; k < 6; k++){
- if(result == store[k])
- returntrue;
- }
- }
- returnfalse;
- }
- publicboolean IsSame2(long Num,long n){
- long store[] = newlong[7];
- long r;
- int i = 0;
- while( n != 0){
- r = n % 10;