计算机学院大学生程序设计竞赛(2015’11)
#include <iostream> #include <stdio.h> #include <math.h> using namespace std; int sum; void solve(int m) { if(m==1) return ; int flag1 = m/2; int flag2 = m-flag1; //return solve(flag1)+solve(flag2)+flag2-flag1; sum += (flag2-flag1); solve(flag1); solve(flag2); } int main() { int i,a,b,c,n,t; scanf("%d",&n); while(n--) { sum = 0; scanf("%d",&t); solve(t); printf("%d\n",sum); } return 0; }
#include <iostream> #include <stdio.h> #define N 10001 using namespace std; int main() { int n,a,b,c,k,t,i; int aa[N]; while(scanf("%d%d%d%d",&n,&a,&b,&c)!=EOF) { k = 0; //cin>>n>>a>>b>>c; //scanf("%d%d%d%d",&n,&a,&b,&c); for(i = 1;i<=n;i++) scanf("%d",&aa[i]); for(i = 1;i<=n;i++){ //cin>>t; //scanf("%d",&t); t = aa[i]; if(t<a) aa[i+1]+=aa[i]; else if((a<=t)&&(t<b)) k+=2; else if((b<=t)&&(t<c)) k+=3; else k+=4; } //cout<<k<<endl; printf("%d\n",k); } return 0; }
#include<iostream> #include <stdio.h> #include<math.h> #include <cstdlib> #define N 1230 //生成100000个质数 using namespace std; int prime[N]; //一个全局数组,用来保存质数表 void makeprime()//生成质数表的子函数 { int j,n=29,i=9,sqrtn;//从第10个质数开始计算,第10个质数是29 prime[0]=2; prime[1]=3; prime[2]=5; prime[3]=7; prime[4]=11; prime[5]=13; prime[6]=17; prime[7]=19; prime[8]=23; //之前已有9个质数在表中 while (i<N) //i是计数变量 { j=0; //每次从表头开始试除 sqrtn=sqrt(n); //n的平方根 while (prime[j]<=sqrtn) { if (n%prime[j]==0)break; //若n能整除质数表中的某数,则跳出 j++; } if (prime[j]>sqrtn) { prime[i]=n; i++; } n+=2; //除了2,偶数不会是质数,因此跳过所有偶数 } } void solve() { for(int i=1;i<N;i++) prime[i-1] = prime[i-1]*prime[i-1]; } int main() { int t,m,flag; makeprime(); solve(); /* for (int i=1; i<N; i++) { cout<<prime[i-1]<<" "; //每输出10个数换行 if (i%10==0)cout<<endl; } */ scanf("%d",&t); while(t--) { scanf("%d",&m); int Max = 99999999; for(int j = 1;j<N;j++) if(abs(m-prime[j-1])<=Max){ // printf("%d %d\n",abs(m-prime[j-1]),Max); Max = abs(m-prime[j-1]); flag = prime[j-1]; //printf("%d\n",Max); } printf("%d\n",flag); } //system("pause"); return 0; }
#include <iostream> #include <stdio.h> #include <algorithm> using namespace std; int cmp(int a,int b) { return a<b; } int main() { int i,j,t; int n,m,k,flag; int a[10001],b[10001]; scanf("%d",&t); while(t--) { long long sum1 = 0,sum2 = 0,index=0; scanf("%d%d%d",&n,&m,&k); for(i=1;i<=n;i++) scanf("%d",&a[i]); //sort(a+1,a+n+1); for(j=1;j<=m;j++) { scanf("%d",&flag); //b[i] = a[flag]; sum1+=a[flag]; a[flag]=0; } if(sum1>k) index = -1; else { sum2 = k-sum1; //cout<<sum1<<" "<<sum2<<endl; sort(a+1,a+n+1,cmp); //for(i=1;i<=n;i++) // cout<<a[i]<<" "; for(i=1;i<=n;i++) { if(sum2>=a[i]) { sum2-=a[i]; index++; } else break; } //index+=m; } printf("%d\n",index); //sort(b+1,b+m+1); } return 0; }