1. 程式人生 > >第六屆藍橋杯省賽

第六屆藍橋杯省賽

一、三角形面積
這裡寫圖片描述

如【圖1】所示。圖中的所有小方格面積都是1。
那麼,圖中的三角形面積應該是多少呢?

請填寫三角形的面積。不要填寫任何多餘內容或說明性文字。

分析:(該正方形的面積減去其他三個三角形的面積即可)
這裡寫圖片描述
程式碼如下:

package s_1;
public class Main {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.print(8*8-2*8/2-4*6/2-4*8/2);
    }
}

二、立方變自身


立方變自身

觀察下面的現象,某個數字的立方,按位累加仍然等於自身。
1^3 = 1 
8^3  = 512    5+1+2=8
17^3 = 4913   4+9+1+3=17
...

請你計算包括1,8,17在內,符合這個性質的正整數一共有多少個?

請填寫該數字,不要填寫任何多餘的內容或說明性的文字。

程式碼如下:

package s_2;
public class Main {
    /**
     * 答案:6個
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
for(int i=1;i<=100000;i++){ int s=i*i*i; //將基本型別轉換為string型別。 String a=Integer.toString(s); int res=0; for(int j=0;j<a.length();j++){ res+=a.charAt(j)-'0'; } if(res==i) System.out.println(i); } } }

三、三羊獻瑞(切記加法運算首位不為0)

三羊獻瑞

觀察下面的加法算式:

      祥 瑞 生 輝
  +   三 羊 獻 瑞
-------------------
   三 羊 生 瑞 氣

(如果有對齊問題,可以參看【圖1.jpg】)

其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字。

請你填寫“三羊獻瑞”所代表的4位數字(答案唯一),不要填寫任何多餘內容。

分析:

由於 "三"是數字的首位,低位的數字進位後必然為1,所以能先確定 ”三“為11).直接進行刪選只要每個數的首位不為0,即可。程式碼的方式為1)的方式。
2).更方便的是直接以e為1作為條件進行刪選。

程式碼如下:

package s_3;
public class Main {
    /*
     *
     *答案為 1085
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        for(int a=0;a<=9;a++){
            for(int b=0;b<=9;b++){
                for(int c=0;c<=9;c++){
                    for(int d=0;d<=9;d++){
                        for(int e=0;e<=9;e++){
                            for(int f=0;f<=9;f++){
                                for(int g=0;g<=9;g++){
                                    for(int h=0;h<=9;h++){
                                if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&a!=g&&a!=h&&
                                        b!=c&&b!=d&&b!=e&&b!=f&&b!=g&&b!=h
                                        &&c!=d&&c!=e&&c!=f&&c!=g&&c!=h&&
                                        d!=e&&d!=f&&d!=g&&d!=h&&
                                        e!=f&&e!=g&&e!=h&&
                                        f!=g&&f!=h&&
                                        g!=h){

                                    int m=a*1000+b*100+c*10+d;
                                    int n=e*1000+f*100+g*10+b;
                                    int k=e*10000+f*1000+c*100+b*10+h;
                                    if(m+n==k){
                                        if(e!=0&&a!=0){

                                            System.out.print(e);
                                            System.out.print(f);
                                            System.out.print(g);
                                            System.out.print(b);
                                            System.out.println();
                                            break;
                                        }
                                    }

                                }
                                    }

                            }

                            }

                        }   
                    }
                }   
            }   
        }
    }
}

四、迴圈節長度

兩個整數做除法,有時會產生迴圈小數,其迴圈部分稱為:迴圈節。
比如,11/13=6=>0.846153846153.....  其迴圈節為[846153] 共有6位。
下面的方法,可以求出迴圈節的長度。

請仔細閱讀程式碼,並填寫劃線部分缺少的程式碼。

    public static int f(int n, int m)
    {
        n = n % m;  
        Vector v = new Vector();
        for(;;)
        {
            v.add(n);
            n *= 10;
            n = n % m;
            if(n==0) return 0;
            if(v.indexOf(n)>=0)  _________________________________ ;  //填空
        }
    }
注意,只能填寫缺少的部分,不要重複抄寫已有程式碼。不要填寫任何多餘的文字。

思路:
這裡寫圖片描述
所用到的函式:

這裡寫圖片描述

這裡寫圖片描述

此題目比較特殊,在vector中的第0位,為其第一次出現的位置。
但仍應該考慮全面一些,此題在數11之前還有其他的數字,所以應用當前vector的長度減去其第一次出現時的下標。

程式碼如下:

package s_4;
import java.util.Vector;
public class Main {
    public static int f(int n, int m)
    {
        n = n % m;  
        Vector v = new Vector();
        for(;;)
        {
            v.add(n);
            n *= 10;
            n = n % m;
            if(n==0) return 0;
            if(v.indexOf(n)>=0)  return v.size()-v.indexOf(n);  //填空
        }
    }
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println(f(11,13));
        System.out.println(f(1,3));
    }
}

五、


九陣列分數

1,2,3...9 這九個數字組成一個分數,其值恰好為1/3,如何組法?
下面的程式實現了該功能,請填寫劃線部分缺失的程式碼。

public class A
{
    public static void test(int[] x)
    {
        int a = x[0]*1000 + x[1]*100 + x[2]*10 + x[3];
        int b = x[4]*10000 + x[5]*1000 + x[6]*100 + x[7]*10 + x[8];
        if(a*3==b) System.out.println(a + " " + b);
    }

    public static void f(int[] x, int k)
    {
        if(k>=x.length){
            test(x);
            return;
        }
        for(int i=k; i<x.length; i++){
            {int t=x[k]; x[k]=x[i]; x[i]=t;}
            f(x,k+1);
            _______________________________________       // 填空
        }
    }

    public static void main(String[] args)
    {
        int[] x = {1,2,3,4,5,6,7,8,9};      
        f(x,0);
    }
}

注意,只能填寫缺少的部分,不要重複抄寫已有程式碼。不要填寫任何多餘的文字。

答案為:

{int t=x[k]; x[k]=x[i]; x[i]=t;}

六、加法變乘法

我們都知道:1+2+3+ ... + 49 = 1225
現在要求你把其中兩個不相鄰的加號變成乘號,使得結果為2015

比如:
1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015
就是符合要求的答案。

請你尋找另外一個可能的答案,並把位置靠前的那個乘號左邊的數字提交(對於示例,就是提交10)。

注意:需要你提交的是一個整數,不要填寫任何多餘的內容。

這裡寫圖片描述
程式碼如下:

package s_6;
public class Main {
    /**
     * 答案為:16
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        由於為遞增,並且不重複的狀態。
        for(int i=1;i<=49;i++){
            for(int j=i+1;j<=49;j++){
                for(int k=j+1;k<=49;k++)
                    for(int l=k+1;l<=49;l++){
                        int m=1225-i-j-k-l;
                        /*
                         * 相鄰那個條件很重要
                         * j==i+1&&l==k+1  !!!!
                         */
                        if(m+i*j+k*l==2015&&j==i+1&&l==k+1)
                            System.out.println(i);
                    }
            }
        }
    }
}

相關推薦

藍橋試題--壘骰子 解題報告

PS: 關於本題演算法的優化演算法已經發表, 請檢視疊骰子( 以矩陣方法實現 ) 原題: 賭聖atm晚年迷戀上了壘骰子,就是把骰子一個壘在另一個上邊,不能歪歪扭扭,要壘成方柱體。 經過長期觀察,atm 發現了穩定骰子的奧祕:有些數字的面貼著會互相排斥! 我們先來規範一下骰子

藍橋

一、三角形面積 如【圖1】所示。圖中的所有小方格面積都是1。 那麼,圖中的三角形面積應該是多少呢? 請填寫三角形的面積。不要填寫任何多餘內容或說明性文字。 分析:(該正方形的面積減去其他三

-藍橋-生命之樹

10、生命之樹 在X森林裡,上帝建立了生命之樹。他給每棵樹的每個節點(葉子也稱為一個節點)上,都標了一個整數,代表這個點的和諧值。上帝要在這棵樹內選出一個非空節點集S,使得對於S中的任意兩個點a,b,都存在一個點列 {a, v1, v2, ..., vk, b} 使得這個點

藍橋測試1->2015年藍橋

1.StringInGrid函式會在一個指定大小的格子中列印指定的字串。 要求字串在水平、垂直兩個方向上都居中。 如果字串太長,就截斷。 如果不能恰好居中,可以稍稍偏左或者偏上一點。 下面的程式實現這個邏輯,請填寫劃線部分缺少的程式碼。 #include <s

藍橋試題--壘骰子 以矩陣的方法實現 解題報告

本貼宣告: 關於這道題的基本解法, 我在之前曾經發表過, 以動態規劃的方式在O(N)的時間複雜度內求解, 但對於資料規模為10^9的資料而已, O(N)顯然是不夠的, 當時我受困良久. 但幸運的是, 某網友給了我一個萬分有用的建議, 以矩陣的方式的進行求解. 當我實現以後,

藍橋C/C++B組

程式設計的大題因為沒有辦法在OJ上提交,不知道是否能過100%的資料,但是大致就是這個意思。1.獎券數目有些人很迷信數字,比如帶“4”的數字,認為和“死”諧音,就覺得不吉利。雖然這些說法純屬無稽之談,但有時還要迎合大眾的需求。某抽獎活動的獎券號碼是5位數(10000-9999

藍橋Java語言C組_移動距離

移動距離 X星球居民小區的樓房全是一樣的,並且按矩陣樣式排列。其樓房的編號為1,2,3... 當排滿一行時,從下一行相鄰的樓往反方向排號。 比如:當小區排號寬度為6時,開始情形如下: 1  2  3

藍橋JAVA-B 全解析

手賤,提交錯了兩個順序,估計gg了 第一題: 我坑爹的竟然想到了用海倫公式,算出來24.92708569439206 唉,直接減去小的不就完事了啊````` 答案:8x8-(8x4)/2-4x6/2-8x2/2=28 第二題: 立方變自身 觀察下面的現象,某個數字的立方,

藍橋C/C++B組 壘骰子

壘骰子 賭聖atm晚年迷戀上了壘骰子,就是把骰子一個壘在另一個上邊,不能歪歪扭扭,要壘成方柱體。 經過長期觀察,atm 發現了穩定骰子的奧祕:有些數字的面貼著會互相排斥! 我們先來規範一下骰子:1 的對面是 4,2 的對面是 5,3 的對面是 6。 假設有 m 組互斥現象

2015年藍橋(C/C++ B組)解題報告

第1題:統計不含4的數字 題目大意   統計10000至99999中,不包含4的數值個數。 題解   (@『落』常笑鷹 提供)直接推匯出數學公式   最高位除了0、4不能使用,其餘8個數字(1,2,3,5,6,7,8,9)均能使用,剩下的四位(

【暴力自動生成排列】(2015)藍橋 C/C++ B組 題解(三題)

第三題題目三羊獻瑞觀察下面的加法算式:       祥 瑞 生 輝  +   三 羊 獻 瑞-------------------   三 羊 生 瑞 氣(如果有對齊問題,可以參看【圖1.jpg】)其中

2015年藍橋A組(C/C++)

部分轉載自:http://blog.csdn.net/summonlight/article/details/61920048還有:https://zhidao.baidu.com/question/310414478.html1. 方程整數解方程: a^2 + b^2 +

藍橋 三羊獻瑞

三羊獻瑞 觀察下面的加法算式:       祥 瑞 生 輝   +   三 羊 獻 瑞 -------------------    三 羊 生 瑞 氣 (如果有對齊問題,可以參看【圖1.jpg】) 其中,相同的漢字代表相同的數字,不同的漢字代表不同的數字。 請你填寫“三

藍橋JavaB組題奇怪的分式

標題:奇怪的分式    上小學的時候,小明經常自己發明新演算法。一次,老師出的題目是:    1/4 乘以 8/5     小明居然把分子拼接在一起,分母拼接在一起,答案是:18/45 (參見圖1.pn

藍橋 分巧克力

ret else pac AC 時間復雜度 輸出格式 names std mil 問題描述  兒童節那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友們。  小明一共有N塊巧克力,其中第i塊是Hi x Wi的方格組成的長方形。   為了公平起見,小明需要從這N塊

藍橋C/C++B組題及答案

part 實現 void 整數 三層 在一起 idt mage 算法; 第一題 【題目】 煤球數目 有一堆煤球,堆成三角棱錐形。具體:第一層放1個,第二層3個(排列成三角形),第三層6個(排列成三角形),第四層10個(排列成三角形),....如果一共有100層,共有多少個煤

藍橋:2017年藍橋B組十題—PREV-40K倍區間

膜拜這位大佬 做法:首先統計字首和sum[i] 表示A1+A2+…+Ai.所以對於任意一段區間[l,r]的和就是sum[r]-sum[l-1].如果要保證這個區間和為K倍數就是:(sum[r]-sum[l-1])%k == 0.變形後就是:sum[r]%k==sum[l-1]%k,

藍橋 Java 平方怪圈

平方怪圈 如果把一個正整數的每一位都平方後再求和,得到一個新的正整數。 對新產生的正整數再做同樣的處理。 如此一來,你會發現,不管開始取的是什麼數字, 最終如果不是落入1,就是落入同一個迴圈圈。 請寫出這個迴圈圈中最大的那個數字。 請填寫該最大數字。 注意:你提

藍橋javaB組題目解析

作者自己做完之後發現省賽的一幕其實是不難的,說實話,自己覺得題目難度還沒有PAT甲級的難度高。 而且作者做了這麼些天之後發現了,PAT甲級主要喜歡考資料結構方面的知識,而藍橋杯則喜歡考演算法這一類的,但是藍橋杯的演算法題目有些又不是很正規,因為作者有好些題目都是

2015藍橋決賽c/c++本科B組試題總結及解題答案

1. 積分之迷 小明開了個網上商店,賣風鈴。共有3個品牌:A,B,C。 為了促銷,每件商品都會返固定的積分。 小明開業第一天收到了三筆訂單:  第一筆:3個A + 7個B + 1個C,共返積分:315  第二筆:4個A + 10個B + 1個C,共返積分:420