簡(jiǎn)單網(wǎng)站建設(shè)軟件有哪些python培訓(xùn)
在這個(gè)時(shí)代,我們總是在比較,覺得自己不夠好
其實(shí)不必羨慕別人的閃光點(diǎn)
每個(gè)人都是屬于自己的限量版
做你喜歡并且擅長(zhǎng)的事,做到極致
自然會(huì)找到自己獨(dú)一無二的價(jià)值
鳥不跟魚比游泳,魚不跟鳥比飛翔
你我各有所長(zhǎng)
A:組隊(duì)
題目描述
作為籃球隊(duì)教練,你需要從以下名單中選出 1 號(hào)位至 5 號(hào)位各一名球員,組成球隊(duì)的首發(fā)陣容。
每位球員擔(dān)任 1 號(hào)位至 5 號(hào)位時(shí)的評(píng)分如下表所示。請(qǐng)你計(jì)算首發(fā)陣容 1 號(hào)位至 5 號(hào)位的評(píng)分之和最大可能是多少?
答案:
97+99+98+98+98(別問,看出來的,不會(huì)寫代碼)
B:不同子串
題目描述。
一個(gè)字符串的非空子串是指字符串中長(zhǎng)度至少為 1 的連續(xù)的一段字符組成的串。例如,字符串 aaab 有非空子串 a, b, aa, ab, aaa, aab, aaab,一共 7 個(gè)。注意在計(jì)算時(shí),只算本質(zhì)不同的串的個(gè)數(shù)。
請(qǐng)問,字符串 0100110001010001有多少個(gè)不同的非空子串?
思路解析:
通過HashSet去存儲(chǔ)每一種不同的子串,最終輸出HashSet的長(zhǎng)度即可(不會(huì)的朋友可以去搜一下對(duì)應(yīng)知識(shí)點(diǎn))
參考代碼:
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;public class Main {public static void main(String[] args) {String s = "0100110001010001";Set<String> set = new HashSet<>();for (int i = 0; i < s.length(); i++) {for (int j = i + 1; j <= s.length(); j++) {String str = s.substring(i,j);set.add(str);}}System.out.println(set.size());}
}
C:等差數(shù)列
題目描述
數(shù)學(xué)老師給小明出了一道等差數(shù)列求和的題目。但是粗心的小明忘記了一 部分的數(shù)列,只記得其中 N 個(gè)整數(shù)。
現(xiàn)在給出這 N 個(gè)整數(shù),小明想知道包含這 N 個(gè)整數(shù)的最短的等差數(shù)列有幾項(xiàng)?
輸入描述
輸入的第一行包含一個(gè)整數(shù) NN。
第二行包含 NN個(gè)整數(shù) A1,A2,???,AN?。(注意 A1~ AN? 并不一定是按等差數(shù)列中的順序給出)
其中,2≤N≤10^5,0≤Ai≤10^9。
輸出描述
輸出一個(gè)整數(shù)表示答案。
輸入輸出樣例
5 2 6 4 10 20
10
樣例說明: 包含 2、6、4、10、20 的最短的等差數(shù)列是 2、4、6、8、10、12、14、16、 18、20。
題解思路:
我們將輸入的數(shù)據(jù)排序,提取出每一個(gè)數(shù)與前一個(gè)數(shù)的差值,因?yàn)榈炔顢?shù)列的話任意兩數(shù)之間的差值相同,我們只需要去判斷提取出來的n-1個(gè)差值中的最大公因數(shù)即可
參考代碼:
import java.util.Scanner;
import java.util.Arrays;
public class Main {public static void main(String[] args) {Scanner sc=new Scanner(System.in);int n=sc.nextInt();//個(gè)數(shù)long []arr=new long[n];for (int i=0;i<arr.length;i++)arr[i]=sc.nextInt();Arrays.sort(arr);//排序long []srr=new long[n-1];for (int i=0;i<srr.length;i++)//從最小值開始運(yùn)算,取每個(gè)值的差值srr[i]=arr[i+1]-arr[0];int max=1;Arrays.sort(srr);//排序,只需要最小的一個(gè)差值的因子判斷即可for (int i=2;i<=srr[0];i++){//求所有差值的最大公因數(shù)for (int j=0;j<srr.length;j++){if (srr[j]%i!=0)break;else if (j==srr.length-1)max=i;}}if((arr[n-1]-arr[0])/max+1<n)//最短長(zhǎng)度為nSystem.out.println(n);elseSystem.out.println((arr[n-1]-arr[0])/max+1);//輸出個(gè)數(shù)}}
D:波動(dòng)數(shù)列
題目描述
觀察這個(gè)數(shù)列:
1?3?0?2??1?1??2??
這個(gè)數(shù)列中后一項(xiàng)總是比前一項(xiàng)增加 2 或者減少 3。
棟棟對(duì)這種數(shù)列很好奇,他想知道長(zhǎng)度為 n 和為 s 而且后一項(xiàng)總是比前一項(xiàng)增加 aa 或者減少 bb 的整數(shù)數(shù)列可能有多少種呢?
輸入描述
輸入的第一行包含四個(gè)整數(shù) n,s,a,b,含義如前面說述。
其中,1≤n≤1000,?10^9≤s≤10^9,1≤a,b≤10^6。
輸出描述
輸出一行,包含一個(gè)整數(shù),表示滿足條件的方案數(shù)。由于這個(gè)數(shù)很大,請(qǐng)輸出方案數(shù)除以 100000007的余數(shù)。
輸入輸出樣例
4 10 2 3
2
樣例說明:這兩個(gè)數(shù)列分別是 2 4 1 3 和 7 4 1 -2。
?題解思路:
???
因?yàn)閤為整數(shù),因此需要滿足下述條件:
因?yàn)榭梢匀∝?fù)數(shù),因此在判斷的時(shí)候,需要取該值的正整數(shù),公式為:
(a%b+b)%b
接下來就是一個(gè)背包問題,從
開始往
計(jì)算,因?yàn)椴恢朗?#43;2還是-3
因此每次得到結(jié)果為arr[i][j]?=?(arr[i?-?1][((j-a*i)%n+n)%n]?+?arr[i?-?1][((j+b*i)%n+n)%n])
其中i表示存入的第i個(gè)數(shù),j表示前i個(gè)數(shù)按照上述公式下模為j的方案數(shù)
arr[i-1]指上一個(gè)數(shù)放入后j-a*i,表示當(dāng)前arr[i][j]是通過上一個(gè)放入數(shù)以后,+2獲得模為j
j+b*i,表示當(dāng)前arr[i][j]是通過上一個(gè)放入數(shù)以后,-3獲得模為j
因此arr[i][j]=(arr[i?-?1][((j-a*i)%n+n)%n]?+?arr[i?-?1][((j+b*i)%n+n)%n])%100000007
最終我們放入了n個(gè)數(shù),實(shí)際上方案數(shù)就是:arr[n-1][(S%n+n)%n]
參考代碼:
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt();int s = sc.nextInt();int a = sc.nextInt();int b = sc.nextInt();int [][]arr=new int[n+1][n+1];arr[0][0] = 1;for (int i = 1; i < n; i++) {//放入for (int j = 0; j < n; j++) {//遍歷模值方案數(shù)arr[i][j] = (arr[i - 1][((j-a*i)%n+n)%n] + arr[i - 1][((j+b*i)%n+n)%n]) % 100000007;}}System.out.print(arr[n - 1][(s%n+n)%n]);}
}