第二场个人训练赛(水题合集)

来源:互联网 发布:自动切换窗口软件 编辑:程序博客网 时间:2024/05/16 14:13

A - 偶数求和 HDU - 2015

Problem Description
有一个长度为n(n<=100)的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。编程输出该平均值序列。

Input
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。

Output
对于每组输入数据,输出一个平均值序列,每组输出占一行。

Sample Input
3 2
4 2

Sample Output
3 6
3 7

[分析]
麻烦的水。就是肝。

[代码]

#include <cstdio>int main(){    int n, m;    while(scanf("%d%d", &n, &m) != EOF) {        int sum=0, ai=2, count=0, i;        for(i=1; i<=n; i++) {            sum += ai;            ai += 2;            if( i % m == 0) {                count++;                if(count != 1)                    printf(" ");                printf("%d", sum / m);                sum = 0;            }        }        if(n % m == 0)            printf("\n");        else            printf(" %d\n", sum / (n % m));    }    return 0;}

B - 数据的交换输出 HDU - 2016

数据的交换输出
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 105432 Accepted Submission(s): 39428

Problem Description
输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。

Input
输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。

Output
对于每组输入数据,输出交换后的数列,每组输出占一行。

Sample Input
4 2 1 3 4
5 5 4 3 2 1
0

Sample Output
1 2 3 4
1 4 3 2 5

[分析]
水。

[代码]

#include<cstdio>#include<cstring>int main(){    int a[105];    int n;    while (scanf("%d", &n) != EOF)    {        if (!n)break;        int min;        scanf("%d", &a[0]);        min = 0;        for (int i = 1; i < n; i++)        {            scanf("%d", &a[i]);            if (a[i] < a[min])min = i;//取最小        }        int c = a[min];///        a[min] = a[0];///        a[0] = c;///交换        printf("%d", a[0]);        for (int i = 1; i < n; i++)        {            printf(" %d", a[i]);//输出        }        printf("\n");    }}

C - 字符串统计 HDU - 2017

字符串统计
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 82603 Accepted Submission(s): 45409

Problem Description
对于给定的一个字符串,统计其中数字字符出现的次数。

Input
输入数据有多行,第一行是一个整数n,表示测试实例的个数,后面跟着n行,每行包括一个由字母和数字组成的字符串。

Output
对于每个测试实例,输出该串中数值的个数,每个输出占一行。

Sample Input
2
asdfasdf123123asdfasdf
asdf111111111asdfasdfasdf

Sample Output
6
9

[分析]
水。

[代码]

#include<cstdio>#include<cstring>int main(){    int n;    char a[1000];    scanf("%d", &n);    while (n--)    {        scanf("%s", a);        int len = strlen(a);        int ans = 0;        for (int i = 0; i < len; i++)        {            if (a[i] >= '0'&&a[i] <= '9')ans++;        }        printf("%d\n", ans);    }}

D - 母牛的故事 HDU - 2018

母牛的故事
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 83962 Accepted Submission(s): 41742

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

Input
输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0

#include <cstdio>using namespace std;int main(){    int n, i;    int year1, year2, year3, yearn;    while (scanf("%d", &n) != EOF)    {        if (!n)break;        year1 = 1;        year2 = 2;        year3 = 3;        if (n == 1 || n == 2 || n == 3)printf("%d\n", n);        else        {            for (i = 4; i <= n; i++)            {                yearn = year3 + year1;                year1 = year2;  //year1前3年                year2 = year3;  //year2前2年                year3 = yearn;  //year3前1年            }            printf("%d\n", yearn);        }    }    return 0;}

E - 数列有序! HDU - 2019

数列有序!

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 90149    Accepted Submission(s): 37926


Problem Description
有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
 

[分析]
别问我为什么突然有页面了。
这题做的特别窝囊,原本只要输入什么输出什么,遇到大的就插入输出,但不知道为什么错了两边,嗯,很生气,一个sort暴力解决。

[代码]

#include<cstdio>#include<algorithm>using namespace std;int main(){    int n,m,i;    int a[105];    while (scanf("%d%d", &n, &m) != EOF)    {        if (!n && !m)break;        for (i = 0; i < n; i++)        {            scanf("%d", &a[i]);        }        a[i] = m;        sort(a, a + n+1);        int flag = 1;        for (i = 0; i <= n; i++)        {            if (flag)flag = 0;            else            {                printf(" ");            }            printf("%d", a[i]);        }        printf("\n");    }}

F - 绝对值排序 HDU - 2020

绝对值排序

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 81503    Accepted Submission(s): 38800


Problem Description
输入n(n<=100)个整数,按照绝对值从大到小排序后输出。题目保证对于每一个测试实例,所有的数的绝对值都不相等。
 

Input
输入数据有多组,每组占一行,每行的第一个数字为n,接着是n个整数,n=0表示输入数据的结束,不做处理。
 

Output
对于每个测试实例,输出排序后的结果,两个数之间用一个空格隔开。每个测试实例占一行。
 

Sample Input
3 3 -4 2
4 0 1 2 -3
0
 

Sample Output
-4 3 2
-3 2 1 0
 

[分析]
随手写了个快速排序。(装一波)然后写个绝对值扔进去。水。快速排序当模板背吧,觉得这个是基本功。虽然有sort。

[代码]

#include<cstdio>void change(int i, int j, int a[]){    int c;    c = a[i];    a[i] = a[j];    a[j] = c;}int jdz(int i){    return i > 0 ? i : -i;}void qsort(int p, int q, int a[]){    int i = p, temp = a[i];    if (p<q)    {        for (int j = i + 1; j <= q; j++)        {            if (jdz(a[j]) >= jdz(temp))            {                change(j, i + 1, a);                i++;            }        }        change(i, p, a);        qsort(p, i - 1, a);        qsort(i + 1, q, a);    }}int main(){    int n;    int a[105];    while (scanf("%d", &n) != EOF)    {        if (!n)break;        for (int i = 0; i < n; i++)        {            scanf("%d", &a[i]);        }        qsort(0,n-1,a);        int flag = 1;        for (int i = 0; i < n; i++)        {            if (flag)            {                printf("%d", a[i]);                flag = 0;            }            else printf(" %d", a[i]);        }        printf("\n");    }}
原创粉丝点击