蓝桥杯寒假训练----7

大提琴的声音就像一条河,左岸是我无法忘却的回忆,右岸是我值得紧握的璀璨年华,中间流淌的,是我年年岁岁淡淡的感伤。

                                                  A - 求平均成绩

假设一个班有n(n<=50)个学生,每人考m(m<=5)门课,求每个学生的平均成绩和每门课的平均成绩,并输出各科成绩均大于等于平均成绩的学生数量。 

Input

输入数据有多个测试实例,每个测试实例的第一行包括两个整数n和m,分别表示学生数和课程数。然后是n行数据,每行包括m个整数(即:考试分数)。 

Output

对于每个测试实例,输出3行数据,第一行包含n个数据,表示n个学生的平均成绩,结果保留两位小数;第二行包含m个数据,表示m门课的平均成绩,结果保留两位小数;第三行是一个整数,表示该班级中各科成绩均大于等于平均成绩的学生数量。 
每个测试实例后面跟一个空行。 

Sample Input

2 2
5 10
10 20

Sample Output

7.50 15.00
7.50 15.00
1
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int m, n;
double a[60][6],ave[6],ave1[60];
int main()
{
    while (scanf("%d%d", &n, &m) != EOF)
    {
        int i,j,k=0;
        double sum=0, sum1=0;
        memset(a,0,sizeof(a));
        memset(ave,0,sizeof(ave));
        memset(ave1,0,sizeof(ave1));
        for (i = 1; i <= n; i++)
            for (j = 1; j <= m; j++)
                scanf("%lf", &a[i][j]);
        for (j = 1; j <= m; j++)
            for (i = 1; i <= n; i++)
                ave[j] += a[i][j];
        for (i = 1; i <= m; i++)
            ave[i]/=n;
        for (i = 1; i <= n; i++)
            if (a[i][1] >= ave[1] && a[i][2] >= ave[2] && a[i][3] >= ave[3] && a[i][4] >= ave[4] && a[i][5] >= ave[5])
                k++;
        for (i = 1; i <= n; i++)
            for (j = 1; j <= m; j++)
                ave1[i] += a[i][j];
        for(int i=1; i<=n; i++)
            ave1[i]=ave1[i]/m;
        for (i = 1; i < n; i++)
            printf("%.2f ", ave1[i]);
        printf("%.2f\n", ave1[i]);
        for (i = 1; i < m; i++)
            printf("%.2f ", ave[i]);
        printf("%.2f\n", ave[i]);
        printf("%d\n\n", k);
    }
    return 0;
}

                                                      B - 母牛的故事

有一头母牛,它每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?

Input

输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0<n<55),n的含义如题目中描述。 
n=0表示输入数据的结束,不做处理。

Output

对于每个测试实例,输出在第n年的时候母牛的数量。 
每个输出占一行。

Sample Input

2
4
5
0

Sample Output

2
4
6
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n,a[60]= {1,2,3},mx=2;
int main()
{
    while(cin>>n&&n!=0)
    {
        if(n<=mx+1)
            cout<<a[n - 1]<<endl;
        else
        {
            for(int i=mx+1; i<n; i++)
                a[i]=a[i-1]+a[i-3];
            mx=n-1;
            cout<<a[n-1]<<endl;
        }
    }
    return 0;
}

                                                         C - 数列有序!

有n(n<=100)个整数,已经按照从小到大顺序排列好,现在另外给一个整数x,请将该数插入到序列中,并使新的序列仍然有序。

Input

输入数据包含多个测试实例,每组数据由两行组成,第一行是n和m,第二行是已经有序的n个数的数列。n和m同时为0标示输入数据的结束,本行不做处理。

Output

对于每个测试实例,输出插入新的元素后的数列。

Sample Input

3 3
1 2 4
0 0

Sample Output

1 2 3 4
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n,m,i,j,s[110];
int main()
{
    while(cin>>n>>m&&(n!=0||m!=0))
    {
        for(i=0; i<n; i++)
            cin>>s[i];
        s[n]=m;
        for(i=0; i<=n; i++)
        {
            for(j=n; j>i; j--)
                if(s[j]<s[i])
                    swap(s[i],s[j]);
        }
        for(i=0; i<=n; i++)
        {
            if(i==0)
                cout<<s[i];
            else
                cout<<' '<<s[i];
        }
        cout<<endl;
    }
    return 0;
}

                                                   D - 发工资咯:)

作为杭电的老师,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了,呵呵 
但是对于学校财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡老师最近就在考虑一个问题:如果每个老师的工资额都知道,最少需要准备多少张人民币,才能在给每位老师发工资的时候都不用老师找零呢? 
这里假设老师的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。 

Input

输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<100),表示老师的人数,然后是n个老师的工资。 
n=0表示输入的结束,不做处理。 

Output

对于每个测试实例输出一个整数x,表示至少需要准备的人民币张数。每个输出占一行。 

Sample Input

3
1 2 3
0

Sample Output

4
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n,x,sum;
int main()
{
    while (cin>>n&&n!=0)
    {
        sum=0;
        for (int i=0; i<n; i++)
        {
            cin>>x;
            sum+=x/100;
            x%=100;
            sum += x/50;
            x%=50;
            sum+=x/10;
            x%=10;
            sum+=x/5;
            x%=5;
            sum+=x/2;
            x%=2;
            sum+=x;
        }
        cout<<sum<<endl;
    }
    return 0;
}

                                                  E - 多项式求和

多项式的描述如下: 
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ... 
现在请你求出该多项式的前n项的和。

Input

输入数据由2行组成,首先是一个正整数m(m<100),表示测试实例的个数,第二行包含m个正整数,对于每一个整数(不妨设为n,n<1000),求该多项式的前n项的和。

Output

对于每个测试实例n,要求输出多项式前n项的和。每个测试实例的输出占一行,结果保留2位小数。

Sample Input

2
1 2

Sample Output

1.00
0.50、
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int m,n;
double sum;
int main()
{
    while(cin>>m)
    {
        while(m--)
        {
            sum=0.0;
            cin>>n;
            for(int i=1; i<=n; i++)
                sum+=(1/((pow((-1),(i+1)))*i));
            printf("%.2f",sum);
            cout << endl;
        }
    }
    return 0;
}

                                              F - 素数判定

对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数。

Input

输入数据有多组,每组占一行,由两个整数x,y组成,当x=0,y=0时,表示输入结束,该行不做处理。

Output

对于每个给定范围内的取值,如果表达式的值都为素数,则输出"OK",否则请输出“Sorry”,每组输出占一行。 

Sample Input

0 1
0 0

Sample Output

OK
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int x,y,a,ct;
int main()
{
    while(cin>>x>>y)
    {
        ct=0;
        if(x==0&&y==0)
            break;
        for(int i=x; i<=y; i++)
        {
            a=i*i+i+41;
            for(int j=2; j<=sqrt(a); j++)
            {
                if(a%j==0)
                {
                    ct++;
                    break;
                }
            }
        }
        if(ct==0)
            cout<<"OK"<<endl;
        else
            cout<<"Sorry"<<endl;
    }
    return 0;
}

                                                   G - 蟠桃记

喜欢西游记的同学肯定都知道悟空偷吃蟠桃的故事,你们一定都觉得这猴子太闹腾了,其实你们是有所不知:悟空是在研究一个数学问题! 
什么问题?他研究的问题是蟠桃一共有多少个! 
不过,到最后,他还是没能解决这个难题,呵呵^-^ 
当时的情况是这样的: 
第一天悟空吃掉桃子总数一半多一个,第二天又将剩下的桃子吃掉一半多一个,以后每天吃掉前一天剩下的一半多一个,到第n天准备吃的时候只剩下一个桃子。聪明的你,请帮悟空算一下,他第一天开始吃的时候桃子一共有多少个呢? 

Input

输入数据有多组,每组占一行,包含一个正整数n(1<n<30),表示只剩下一个桃子的时候是在第n天发生的。

Output

对于每组输入数据,输出第一天开始吃的时候桃子的总数,每个测试实例占一行。

Sample Input

2
4

Sample Output

4
22
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int a[50]= {0,1,4},n,b;
int main()
{
    b=3;
    for(int i=1; i<=30; i++)
    {
        a[i+1]=a[i]+b;
        b*=2;
    }
    while(cin>>n)
    {
        cout<<a[n]<<endl;
    }
    return 0;
}

                                     H - 青年歌手大奖赛_评委会打分

青年歌手大奖赛中,评委会给参赛选手打分。选手得分规则为去掉一个最高分和一个最低分,然后计算平均得分,请编程输出某选手的得分。

Input

输入数据有多组,每组占一行,每行的第一个数是n(2<n<=100),表示评委的人数,然后是n个评委的打分。

Output

对于每组输入数据,输出选手的得分,结果保留2位小数,每组输出占一行。

Sample Input

3 99 98 97
4 100 99 98 97

Sample Output

98.00
98.50
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n;
int main()
{
    while(scanf("%d",&n)!= EOF)
    {
        double score[110],mx=-1,mi=200,sum=0;
        for(int i=1; i<=n; i++)
        {
            scanf("%lf",&score[i]);
            sum += score[i];
            if(score[i] > mx)
                mx = score[i];
            if(score[i] < mi)
                mi = score[i];
        }
        printf("%.2f\n", (sum - mx - mi)/(n - 2));
    }
    return 0;
}

                                                I - C语言合法标识符

输入一个字符串,判断其是否是C的合法标识符。 

Input

输入数据包含多个测试实例,数据的第一行是一个整数n,表示测试实例的个数,然后是n行输入数据,每行是一个长度不超过50的字符串。 

Output

对于每组输入数据,输出一行。如果输入数据是C的合法标识符,则输出"yes",否则,输出“no”。 

Sample Input

3
12ajf
fi8x_a
ff  ai_2

Sample Output

no
yes
no
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int n,ct,l;
char s[60];
int main()
{
    scanf("%d",&n);
    getchar();
    while(n--)
    {
        gets(s);
        l=strlen(s);
        ct=0;
        if((s[0]>='a'&&s[0]<='z')||(s[0]>='A'&&s[0]<='Z')||s[0]=='_')
            ct++;
        for(int i=1; i<l; i++)
        {

            if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')||s[i]=='_'||(s[i]>='0'&&s[i]<='9'))
                ct++;
        }
        if(ct==l)
            printf("yes\n");
        else
            printf("no\n");
    }
    return 0;
}

                                                  J - 查找最大元素

对于输入的每个字符串,查找其中的最大字母,在该字母后面插入字符串“(max)”。 

Input

输入数据包括多个测试实例,每个实例由一行长度不超过100的字符串组成,字符串仅由大小写字母构成。 

Output

对于每个测试实例输出一行字符串,输出的结果是插入字符串“(max)”后的结果,如果存在多个最大的字母,就在每一个最大字母后面都插入"(max)"。 

Sample Input

abcdefgfedcba
xxxxx

Sample Output

abcdefg(max)fedcba
x(max)x(max)x(max)x(max)x(max)
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int len;
char str[110],mx;
int main()
{
    while(scanf("%s",str)!=EOF)
    {
        mx='0';
        len=strlen(str);
        for(int i=0; i<len; i++)
            if(mx<str[i])
                mx=str[i];
        for(int i=0; i<len; i++)
        {
            if(mx!=str[i])
                printf("%c",str[i]);
            else
                printf("%c(max)",str[i]);
        }
        printf("\n");
    }
    return 0;
}

                                           K - 首字母变大写

输入一个英文句子,将每个单词的第一个字母改成大写字母。 

Input

输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。 

Output

请输出按照要求改写后的英文句子。 

Sample Input

i like acm
i want to get an accepted

Sample Output

I Like Acm
I Want To Get An Accepted
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
char a[110];
int main()
{
    while(gets(a)!=NULL)
    {
        int len;
        len=strlen(a);
        for(int j=1,i=0; i<len; i++)
        {
            if(j==1&&a[i]!=' ')
                a[i]-=32;
            if(a[i]!=' ')
                j=0;
            else
                j=1;
        }
        puts(a);
    }
    return 0;
}

                                               L - geometry

There is a point PP at coordinate (x,y)(x,y). 
A line goes through the point, and intersects with the postive part of X,YX,Y axes at point A,BA,B. 
Please calculate the minimum possible value of |PA|∗|PB||PA|∗|PB|.

Input

the first line contains a positive integer T,means the numbers of the test cases. 

the next T lines there are two positive integers X,Y,means the coordinates of P. 

T=500T=500,0<X,Y≤100000<X,Y≤10000. 

Output

T lines,each line contains a number,means the answer to each test case. 


 

Sample Input

1
2 1

Sample Output

4

in the sample $P(2,1)$,we make the line $y=-x+3$,which intersects the positive axis of $X,Y$ at (3,0),(0,3).$|PA|=\sqrt{2},|PB|=2\sqrt{2},|PA|*|PB|=4$,the answer is checked to be the best answer.
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
typedef long long ll;
using namespace std;
int t,x,y;
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d",&x,&y);
        printf("%d\n",2*x*y);
    }
    return 0;
}

                                                       M - Key Set

soda has a set SS with nn integers {1,2,…,n}{1,2,…,n}. A set is called key set if the sum of integers in the set is an even number. He wants to know how many nonempty subsets of SS are key set.

Input

There are multiple test cases. The first line of input contains an integer TT (1≤T≤105)(1≤T≤105), indicating the number of test cases. For each test case: 

The first line contains an integer nn (1≤n≤109)(1≤n≤109), the number of integers in the set.

Output

For each test case, output the number of key sets modulo 1000000007.

Sample Input

4
1
2
3
4

Sample Output

0
1
3
7
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#define inf 0x3f3f3f3f
#define mod 1000000007
typedef long long ll;
using namespace std;
int  T;
ll n;
ll kpow(ll a, ll b, ll c)
{
    ll ans=1;
    while(b)
    {
        if(b&1)
            ans=(ans*a)%c;
        a = (a*a)%c;
        b>>=1;
    }
    return ans;
}
int main()
{
    scanf("%d",&T);
    while(T--)
    {
        scanf("%lld",&n);
        printf("%lld\n",kpow(2,n-1,mod)-1);
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值