已知:Sn= 1+1/2+1/3+…+1/n。顯然對于任意一個整數K,當n足夠大的時候,Sn大于K。現給出一個整數K(1<=k<=15),要求計算出一個最小的n;使得Sn>K。
鍵盤輸入 k
屏幕輸出 n
1Sample Output
2#include "stdio.h"#include "stdlib.h"#include "math.h"#define max 10int total[1000];//組合的所有int indexALL=0;long long sushu[100008];int sushu_index=2;void sushubiao(){ int flag; sushu[0]=2; sushu[1]=3; //素數打表 for(int i=5;i<max;i=i+2){ flag=1; for(int j=2;j<=sqrt(i);j++){ if(i%j==0){ flag=0; break; } } if(flag==1){ // PRintf("//////zheli2////n"); sushu[sushu_index]=i; sushu_index++; } } }void ALLsort(int num[],int temp[],int start,int end,int index,int k){ if(index==k){ for(int i=0;i<k;i++){ total[indexALL]+=temp[i]; } indexALL++; return; } //if(start+(k-index)>end)return;//表示不夠組合那么多個 temp[index]=num[start]; ALLsort(num,temp,start+1,end,index+1,k);//即這個組合選擇了這個數 ALLsort(num,temp,start+1,end,index,k); }int issushu(int n){ for(int i=0;i<sushu_index;i++){ if(n==sushu[i]){ return 1; } } return 0;}int main(){ // printf("//////zheli////n"); freopen("/Users/qigelaodadehongxiaodi/Desktop/data1.txt", "r", stdin); //這個不理,是用來方便輸入輸出的東西,利用文本輸入流來讀取數據 //提交代碼的時候記得注銷這條語句 int n,k; int num[1000]; int temp[1000]; scanf("%d %d",&n,&k); for(int i=0;i<n;i++){ scanf("%d",&num[i]); } // printf("//////zheli////n"); sushubiao();//素數打表 // printf("//////zheli////n"); ALLsort(num,temp,0,n-1,0,k);//打表,得到全排列,在數組total中,下表為indexALL int cnt=0; for(int i=0;i<indexALL;i++){ printf("%d/n",total[i]); // cnt+=issushu(total[i]); } printf("%d/n",n); return 0;}
新聞熱點
疑難解答