周赛一 1003 uu的难题

Description
U老板的傻笑越来越严重了,这说明uu的智商正以极快的速度变成情商。这天平台君uu被人问了一道题,题目如下“有一个长度为n的数列,该数列定义为从2开始的递增有序偶数,现在要求你按照顺序每m个数求出一个平均值,如果最后不足m个,则以实际数量求平均值。求该平均值序列”,大神认为uu能通过智商测试应该能解决。所以,uu又来求助了。
Input
输入数据有多组,每组占一行,包含两个正整数n和m,n和m的含义如上所述。(0<=n,m<=100)
Output
对于每组输入数据,首先输出一个“Case# X:”,代表第几组用例;
然后输出一个平均值序列,每组输出占一行
Sample Input
3 2
4 2
Sample Output
Case# 1:
3 6
Case# 2:
3 7
Solution
此题数据量很小,直接暴力就可过,稍微优美点就是找下规律,显然答案大致是一个首项为m+1公差为2*m的等差数列,最后一项可能不满足这个等差数列通项,是否满足取决与m是否能整除n,也就是n是否恰能被分成整数个m,如果可以直接输出这个等差数列前n/m项即可,否则还需要再累加最后多出的几项(n%m项)另求一个均值。
注意:输出时由于要求这个序列相邻两数之间用空格隔开而最后一个数后面没有空格只是换行,这里可以用到一个三目运算简化代码,具体应用见代码。
Code

#include
int main()
{
    int n,m,res=1;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        printf("Case# %d:\n",res++);
        if(n==0)//n=0特判 
        {
            printf("0\n");
            continue;
        }
        int t=n/m;//计算n里有多少m 
        n=n%m;
        int d=m+1;
        if(!n)//如果m整除n那么答案就是一个首项为d,公差为2*m的等差数列 
            for(int i=0;iprintf("%d%c",d,i==t-1?'\n':' '),d+=2*m;
        else//如果m不整除n那么答案除上面这个等差数列外还有一项需要另算 
        {
            for(int i=0;iprintf("%d ",d),d+=2*m;
            d=2*(t*m+1);
            int sum=0;
            for(int i=0;i2;
            printf("%d\n",sum/n);
        }
    }
    return 0;
}

你可能感兴趣的:(周赛一 1003 uu的难题)