已知: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;}
新闻热点
疑难解答