17校招真题题集(2)6-10
注:本系列題目全是按照通過率降序來排列的,基本保證題目難度遞增。
?
6、
題目名稱:Fibonacci數列
來源:網易
題目描述
Fibonacci數列是這樣定義的:
F[0] = 0
F[1] = 1
for each i ≥ 2: F[i] = F[i-1] + F[i-2]
因此,Fibonacci數列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci數列中的數我們稱為Fibonacci數。給你一個N,你想讓其變為一個Fibonacci數,每一步你可以把當前數字X變為X-1或者X+1,現在給你一個數N求最少需要多少步可以變為Fibonacci數。
輸入描述:
輸入為一個正整數N(1 ≤ N ≤ 1,000,000)輸出描述:
輸出一個最小的步數變為Fibonacci數"示例1
輸入
15輸出
2分析:我們不斷生成斐波那契數列,生成到比輸入大了以后,比較這一個數和前一個數就好。
def ojbk(n):x=0y=1while 1:if y>n: return min(y-n, n-x)x,y=y,x+y print(ojbk(input()))7、
題目名稱:數字反轉
來源:網易
題目描述
對于一個整數X,定義操作rev(X)為將X按數位翻轉過來,并且去除掉前導0。例如:
如果 X = 123,則rev(X) = 321;
如果 X = 100,則rev(X) = 1.
現在給出整數x和y,要求rev(rev(x) + rev(y))為多少?
輸入描述:
輸入為一行,x、y(1 ≤ x、y ≤ 1000),以空格隔開。輸出描述:
輸出rev(rev(x) + rev(y))的值示例1
輸入
123 100輸出
223
分析:直接按題意寫出來函數,模擬即可。
python字符串法:
L=(input("").split(' ')) a=L[0] b=L[1] def rev(x):q=int(x[::-1])return q c=str(rev(a)+rev(b)) print(str(rev(c)))簡化:
a = input().split() print(str(int(a[0][::-1]) + int(a[1][::-1]))[::-1].lstrip("0"))c++實現高效逆置:
#include<iostream> using namespace std; int rev(int m) {int t=0;while(m>0){t=t*10+m%10;m=m/10;}return t; }int main() { int x,y;while(cin>>x>>y){cout<<rev(rev(x) + rev(y))<<endl;}return 0; }?
8、
題目名稱:下廚房
來源:網易
題目描述
牛牛想嘗試一些新的料理,每個料理需要一些不同的材料,問完成所有的料理需要準備多少種不同的材料。
輸入描述:
每個輸入包含 1 個測試用例。每個測試用例的第 i 行,表示完成第 i 件料理需要哪些材料,各個材料用空格隔開,輸入只包含大寫英文字母和空格,輸入文件不超過 50 行,每一行不超過 50 個字符。輸出描述:
輸出一行一個數字表示完成所有料理需要多少種不同的材料。示例1
輸入
BUTTER FLOUR HONEY FLOUR EGG輸出
4分析:就是沒有出現過的就放到一個容器里,高效查找。
python:
ll=[]//存東西 while 1:try:l=(input().split())for i in range(len(l)):if l[i] in ll://沒有就放進去continueelse:ll.append(l[i])except:print(len(ll))breakc++ set:
#include <iostream> #include <set> #include <string> using namespace std; int main() {string str;set<string> datas;while (cin >> str) {datas.insert(str);}cout << datas.size() << endl;return 0; }?
9、
題目名稱:n個數里出現次數大于等于n/2的數
來源:好未來
題目描述
輸入n個整數,輸出出現次數大于等于數組長度一半的數。
輸入描述:
每個測試輸入包含 n個空格分割的n個整數,n不超過100,其中有一個整數出現次數大于等于n/2。輸出描述:
輸出出現次數大于等于n/2的數。示例1
輸入
3 9 3 2 5 6 7 3 2 3 3 3輸出
3分析:你就算暴力也是可以的
l=(input().split()) for i in l://遍歷每一個數a=0for j in l://查找if i==j:a+=1if a>len(l)/2-1:print(i)break當然,動態規劃思想會很高效,我這里放一個鏈接,第一題就是
https://blog.csdn.net/hebtu666/article/details/81390118感興趣的看一看
?
10、
題目名稱:小易喜歡的單詞
來源:網易
題目描述
小易喜歡的單詞具有以下特性:
1.單詞每個字母都是大寫字母
2.單詞沒有連續相等的字母
3.單詞沒有形如“xyxy”(這里的x,y指的都是字母,并且可以相同)這樣的子序列,子序列可能不連續。
例如:
小易不喜歡"ABBA",因為這里有兩個連續的'B'
小易不喜歡"THETXH",因為這里包含子序列"THTH"
小易不喜歡"ABACADA",因為這里包含子序列"AAAA"
小易喜歡"A","ABA"和"ABCBA"這些單詞
給你一個單詞,你要回答小易是否會喜歡這個單詞(只要不是不喜歡,就是喜歡)。
輸入描述:
輸入為一個字符串,都由大寫字母組成,長度小于100輸出描述:
如果小易喜歡輸出"Likes",不喜歡輸出"Dislikes"示例1
輸入
AAA輸出
Dislikes?
分析:題意i容易理解,操作挺麻煩的,根據題意實現功能就好。
看代碼注釋
a=input() q=0 v=0 for i in a://遍歷判斷條件if i.islower():print("Dislikes")q=1//后面就不會執行了break for j in range(len(a)-1)://遍歷判斷條件if q==1:breakelif a[j]==a[j+1]:print("Dislikes")q=1//后面就不會執行了 for z in range(len(a)-3)://遍歷判斷條件if q==1:breakfor x in range(1,len(a)):if a[z]==a[x]://找到相同的for g in range(z+1,x)://相同的之間for h in range(x+1,len(a))://之后if a[h]==a[g]://相同,也就是ABAB型print("Dislikes")v=1breakif v==1:break if q==0://執行到這里就是likeprint("Likes")找來的c++,不是我寫的:
#include "stdio.h" #include "string.h"int FindDislike(char *s,int length); int FindForward(char *s,int x,int y,int length);int main(){char s[101];int like=1;scanf("%s",s);int len=strlen(s); //先完成有沒有連續的數for(int i=0;i<len-1;i++){if(len<2){like=1;}else if(s[i]==s[i+1]){like=0;break;}}///if(like==1 && len>1)like=FindDislike(s,len);if(like==1)printf("Likes",s);elseprintf("Dislikes");return 0; }int FindDislike(char *s,int length){int like=1;for(int i=0;i<length;i++){for(int j=1;j<length;j++){if(s[i]==s[j]) {like=FindForward(s,i,j,length);if(like==0){ return 0;}} }}return 1; }int FindForward(char *s,int x,int y,int length){if(y==length-1)return 1;for(int i=x+1;i<y;i++){for(int j=y+1;j<length;j++){if(s[i]==s[j])return 0;}}return 1; }?
總結
以上是生活随笔為你收集整理的17校招真题题集(2)6-10的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深搜DFS\广搜BFS 图初步入门
- 下一篇: 算法总结-1算法入门