注:本系列題目全是按照通過率降序來排列的,基本保證題目難度遞增。
?
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))break
c++ 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;
}
?