時間限制 C/C++語言 1000MS;其餘語言 3000MSios
內存限制 C/C++語言 65536KB;其餘語言 589824KBc++
題目描述
儘管是一個CS專業的學生,小B的數學基礎很好並對數值計算有着特別的興趣,喜歡用計算機程序來解決數學問題。如今,她正在玩一個數值變換的遊戲。她發現計算機中常常用不一樣的進製表示同一個數,如十進制數123表達爲16進制時只包含兩位數七、11(B),用八進制表示時爲三位數一、七、3。按不一樣進製表達時,各個位數的和也不一樣,如上述例子中十六進制和八進制中各位數的和分別是18和11。
小B感興趣的是,一個數A若是按2到A-1進製表達時,各個位數之和的均值是多少?她但願你能幫她解決這個問題?
全部的計算均基於十進制進行,結果也用十進制表示爲不可約簡的分數形式。數組
輸入
輸入中有多組測試數據。每組測試數據爲一個整數A(1=<A=<5000)。測試
輸出
對每組測試數據,在單獨的行中以X/V的形式輸出結果。ui
樣例輸入
5
3spa
樣例輸出
7/3
2/1code
C++代碼blog
#include<bits/stdc++.h> using namespace std; int hexSum(int n,int a) { int sum = 0; while(n) { sum += (n%a); n = n/a; } return sum; } int main() { int A; while(cin>>A) { int sum = 0; for(int i=2; i<=A-1; i++) { sum += hexSum(A,i); } int r = __gcd(sum,A-2); cout<<sum/r<<'/'<<(A-2)/r<<endl; } return 0; }
運行結果
排序
時間限制 C/C++語言 1000MS;其它語言 3000MS遊戲
內存限制 C/C++語言 65536KB;其它語言 589824KB
題目描述
給你兩個集合,要求 {A} + {B}。
注:同一個集合中不會有兩個相同的元素。
輸入
多組(不超過 5 組)數據。
每組輸入數據分爲三行,第一行有兩個數字 n,m(0<n,m<10000),分別表示集合 A 和集合 B 的元素個數。後兩行分別表示集合 A 和集合 B。每一個元素爲不超出 int 範圍的整數,每一個元素之間有一個空格隔開。
輸出
針對每組數據輸出一行數據,表示合併後的集合,要求從小到大輸出,每一個元素之間有一個空格隔開。
樣例輸入
1 2
1
2 3
1 2
1
1 2
樣例輸出
1 2 3
1 2
C++代碼
#include<bits/stdc++.h> using namespace std; int main() { int m,n,i,j,c; int nums[20010] = {0}; while(cin>>m>>n) { for(i=0; i<m+n; i++) { cin>>nums[i]; } sort(nums,nums+m+n); c = unique(nums,nums+m+n)-nums; for(j=0; j<c; j++) { if(j==c-1) { cout<<nums[j]; } else { cout<<nums[j]<<' '; } } } return 0; }
運行結果
時間限制 C/C++語言 1000MS;其它語言 3000MS
內存限制 C/C++語言 65536KB;其它語言 589824KB
題目描述
小明同窗要參加一場考試,考試一共有n道題目,小明必須作對至少60%的題目才能經過考試。考試結束後,小明估算出每題作對的機率,p1,p2,…,pn。你能幫他算出他經過考試的機率嗎?
輸入
輸入第一行一個數n(1<=n<=100),表示題目的個數。第二行n個整數,p1,p2,…,pn。表示小明有pi%的機率作對第i題。(0<=pi<=100)
輸出
小明經過考試的機率,最後結果四捨五入,保留小數點後五位。
樣例輸入
4
50 50 50 50
樣例輸出
0.31250
C++代碼
#include<bits/stdc++.h> using namespace std; const int maxn=100+5; int main() { int i,j,temp,n; double p[maxn]; double dp[maxn][maxn]; cin>>n; for(i=0; i<n; i++) { cin>>temp; p[i] = temp/100.0; } dp[0][0] = 1; for(i=1; i<=n; i++) { dp[i][0] = dp[i-1][0]*(1-p[i-1]); for(j=1; j<=n; j++) { dp[i][j] = dp[i-1][j]*(1-p[i-1])+dp[i-1][j-1]*p[i-1]; } } double result = 0; for(i = (int)(ceil(0.6*n)); i<=n; i++) { result += dp[n][i]; } printf("%0.5f",result); return 0; }
運行結果
時間限制 C/C++語言 2000MS;其餘語言 4000MS
內存限制 C/C++語言 65536KB;其餘語言 589824KB
題目描述
異或運算是常見的二進制運算,給出兩個n位二進制數a,b。a異或b的運算依次考慮二進制的每一位,若這一位相同,那麼這一位的異或結果就是0,不一樣就是1。
例如a=1100, b=0100。執行a異或b的運算,a的最高位是1,b的最高位是0,兩個數字不一樣因此最高位異或結果是1;a和b次高位都是1,因此次高位異或爲0;最後兩位它們都是0,因此異或結果也都是0。那麼a異或b的答案就是1000。
如今輸入兩個n位二進制數,輸出它們異或結果的十進制答案。上述樣例中異或的二進制結果爲1000,轉化成十進制就是8。
輸入
輸入有三行,第一行一個數n(1<=n<=20),接下來兩行有兩個n位二進制數。輸入的二進制數可能有前導零。
輸出
輸出一個數,異或結果的十進制數值,不要輸出前導零。
樣例輸入
4
1100
0100
樣例輸出
8
C++代碼
#include<bits/stdc++.h> using namespace std; int BinaryConversionDecimal(string s,int n) { int dec = 0, b = 1; for(int i=0; i<n; i++) { dec = dec + (s[n-i-1]-'0') * b; b *= 2; } return dec; } int main() { int n; string s; cin>>n; cin>>s; int a = BinaryConversionDecimal(s,n); cin>>s; int b = BinaryConversionDecimal(s,n); cout<<(a^b)<<endl; return 0; }
運行結果
時間限制 C/C++語言 1000MS;其它語言 3000MS
內存限制 C/C++語言 65536KB;其它語言 589824KB
題目描述
公司最近新研發了一種產品,共生產了n件。有m個客戶想購買此產品,第i個客戶出價Vi元。爲了確保公平,公司決定要以一個固定的價格出售產品。每個出價不低於要價的客戶將會獲得產品,餘下的將會被拒絕購買。請你找出能讓公司利潤最大化的售價。
輸入
輸入第一行二個整數n(1<=n<=1000),m(1<=m<=1000),分別表示產品數和客戶數。
接下來第二行m個整數Vi(1<=Vi<=1000000),分別表示第i個客戶的出價。
輸出
輸出一行一個整數,表明可以讓公司利潤最大化的售價。
樣例輸入
5 4
2 8 10 7
樣例輸出
7
C++代碼
#include<bits/stdc++.h> using namespace std; int main() { int v[1010]; int n; // 商品數 n int m; // 客戶數 m int i,low,temp,max=0,index; cin>>n>>m; for(i = 0; i<m; i++) { cin>>v[i]; } // 對數組 v 進行從小到大的排序 sort(v,v+m); low = m>n?(m-m):0; for(i = low; i<m; i++) { temp = v[i]*(m-i); if(temp>=max) { max = temp; index = v[i]; } } cout<<index<<endl; return 0; }
運行結果
#include<iostream> using namespace std; int main () { int num, rem, temp, dec = 0, b = 1; cout << "Enter the binary number : "; cin >> num; temp = num; while (temp > 0) { rem = temp % 10; dec = dec + rem * b; b *= 2; temp /= 10; } cout << "The decimal equivalent of " << num << " is " << dec; return 0; }
運行結果
#include<stdio.h> #define ROW 4 #define COL 4 int M[ROW][COL] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; main(){ int i, j, t; printf("Before transposition:\n"); for (i = 0; i < 4; ++i){ for (j = 0; j < 4; ++j){ printf ("%d\t", M[i][j]); } printf("\n"); } for (i = 0; i < 4; ++i){ for(j = i;j < 4; ++j){ t = M[i][j]; M[i][j] = M[j][i]; M[j][i] = t; } } printf("After transposition:\n"); for (i = 0; i < 4; ++i){ for (j = 0; j < 4; ++j){ printf ("%d\t", M[i][j]); } printf("\n"); } }
運行結果