京東2017校招編程題

京東2017校招編程題ios

1.進制均值web

儘管是一個CS專業的學生,小B的數學基礎很好並對數值計算有着特別的興趣,喜歡用計算機程序來解決數學問題,如今,她正在玩一個數值變換的遊戲。她發現計算機中常常用不一樣的進製表示一個數,如十進制數123表達爲16進制時只包含兩位數七、11(B),用八進制表示爲三位數一、七、3,按不一樣進製表達時,各個位數的和也不一樣,如上述例子中十六進制和八進制中各位數的和分別是18和11,。 小B感興趣的是,一個數A若是按2到A-1進製表達時,各個位數之和的均值是多少?她但願你能幫她解決這個問題? 全部的計算均基於十進制進行,結果也用十進制表示爲不可約簡的分數形式。
 1 #include<iostream>
 2 #include<vector>
 3 #include<string>
 4 #include<algorithm>
 5 using namespace std;
 6 int change(int n, int m)
 7 {
 8     int i = 0;
 9     int sum = 0;
10     while(1)
11     {
12         sum += n % m;
13         n /= m;
14         if(n == 0)
15             break;
16     }
17     return sum;
18 }
19 //計算sum和n-2的最大公約數,方便輸出進行約分
20 int gdb(int a, int b)
21 {
22     if(a < b)
23         swap(a, b);
24     if(a % b == 0)
25         return b;
26     else
27         return gdb(b, a%b);
28 }
29 
30 int main()
31 {
32     int n;
33     while(cin>>n)
34     {
35         int sum = 0;
36         for(int i=2; i<n; i++)
37             sum += change(n, i);
38         int b = gdb(sum, (n-2));
39         cout << sum/b << "/" << (n-2)/b << endl;
40         //cout<<sum<<"/"<<n-2<<endl;
41     }
42     return 0;
43 }

 2.幸運數編程

小明同窗學習了不一樣的進制以後,拿起了一些數字作起了遊戲。小明同窗知道,在平常生活中咱們最經常使用的是十進制數,而在計算機中,二進制數也很經常使用。如今對於一個數字x,小明同窗定義出了兩個函數f(x)和g(x)。 f(x)表示把x這個數用十進制寫出後各個數位上的數字之和。如f(123)=1+2+3=6。 g(x)表示把x這個數用二進制寫出後各個數位上的數字之和。如123的二進制表示爲1111011,那麼,g(123)=1+1+1+1+0+1+1=6。 小明同窗發現對於一些正整數x知足f(x)=g(x),他把這種數稱爲幸運數,如今他想知道,小於等於n的幸運數有多少個?
 1 #include<iostream>
 2 using namespace std;
 3 int f(int n,int m)
 4 {
 5     int i = 0;
 6     int sum = 0;
 7     while(1)
 8     {
 9         sum += n % m;
10         n /= m;
11         if(n == 0)
12             break;
13     }
14     return sum;
15 }
16 int main()
17 {
18     int n;
19     int count=0;
20     while(cin>>n)
21     {
22         for(int i=1;i<=n;i++)
23         {
24             int a=f(i,10);
25             int b=f(i,2);
26             if(a==b)
27                 count++;
28         }
29         cout<<count<<endl;
30     }
31     return 0;
32 }

 3.集合合併函數

給你兩個集合,要求{A} + {B}。 注:同一個集合中不會有兩個相同的元素。
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <vector>
 4 using namespace std;
 5 int main()
 6 {
 7     vector<int> v;
 8     int n,m,i;
 9     int temp;
10     while(cin>>n>>m)
11     {
12         v.clear();
13         for(i=1;i<=m+n;i++)//輸入
14         {
15             cin>>temp;
16             v.push_back(temp);
17         }
18         sort(v.begin(),v.end());//排序
19         v.erase(unique(v.begin(), v.end()), v.end());//去重
20         for (i = 0; i < v.size()-1; i++)//輸出
21         {
22             cout<<v[i]<<" ";
23         }
24         cout<<v[i]<<endl;
25     }
26     //unique()函數將重複的元素放到vector的尾部 而後返回指向第一個重複元素的迭代器 再用erase函數擦除從這個元素到最後元素的全部的元素
27     return 0;
28 }

 4.保衛方案 學習

戰爭遊戲的相當重要環節就要到來了,此次的結果將決定王國的生死存亡,小B負責首都的防衛工做。首都位於一個四面環山的盆地中,周圍的n個小山構成一個環,做爲預警措施,小B計劃在每一個小山上設置一個觀察哨,日夜不停的瞭望周圍發生的狀況。 一旦發生外地入侵事件,山頂上的崗哨將點燃烽煙,若兩個崗哨所在的山峯之間沒有更高的山峯遮擋且二者之間有相連通路,則崗哨能夠觀察到另外一個山峯上的烽煙是否點燃。因爲小山處於環上,任意兩個小山之間存在兩個不一樣的鏈接通路。知足上述不遮擋的條件下,一座山峯上崗哨點燃的烽煙至少能夠經過一條通路被另外一端觀察到。對於任意相鄰的崗哨,一端的崗哨必定能夠發現一端點燃的烽煙。 小B設計的這種保衛方案的一個重要特性是可以觀測到對方烽煙的崗哨對的數量,她但願你可以幫她解決這個問題。 
輸入描述:
輸入中有多組測試數據,每一組測試數據的第一行爲一個整數n(3<=n<=10^6),爲首都周圍的小山數量,第二行爲n個整數,依次表示爲小山的高度h(1<=h<=10^9).
輸出描述:
對每組測試數據,在單獨的一行中輸出能相互觀察到的崗哨的對數。
示例1 
輸入
5
1 2 4 5 3
輸出
7
相關文章
相關標籤/搜索