Chinaunix首页 | 论坛 | 博客
  • 博客访问: 590421
  • 博文数量: 197
  • 博客积分: 7001
  • 博客等级: 大校
  • 技术积分: 2155
  • 用 户 组: 普通用户
  • 注册时间: 2005-02-24 00:29
文章分类

全部博文(197)

文章存档

2022年(1)

2019年(2)

2015年(1)

2012年(100)

2011年(69)

2010年(14)

2007年(3)

2005年(7)

分类: C/C++

2011-12-03 21:35:10


[橙]幂函数的奇偶性

Time Limit:1000MS  Memory Limit:65536K
Total Submit:404 Accepted:66

Description

Keys在体育馆打乒乓球的时候,看着球运行的轨迹。突然想到中学时我们都学过函数的奇偶性。如果对于函数f(x)的定义域内的任意一个x值都有 f(-x)=-f(x),那么就称f(x)为奇函数(Odd Function)。如果对于函数f(x)的定义域内的任意一个x值都有f(-x)=f(x),那么就称f(x)为偶函数(Even Function)。如果函数f(x)既是奇函数,又是偶函数,那么就称f(x)为特殊函数(Particular Function)。既不是奇函数,又不是偶函数的函数称普通函数(Ordinary Function)。
对于幂函数f(x)=a1*x^b1+a2*x^b2+....+an*x^bn,(a1..an,b1..bn均为整数),经过合并同类项后(需要合并的话),函数的奇偶性是怎样的呢?很简单吧,现在请聪明的你解决这个问题咯。

Input

输入数据有多组,第一行包括一个数n,接下一行有n个数对(0<=n<=10),依次表示幂函数每个单项式的系数和指数。数据保证在int范围内,当n=0时输出结束。n=0的时候不处理。

Output

对于第i组数据,输出包括一行,首先输出"Case #i: ",然后输出幂函数的类型。
(Odd Function、Even Function、Particular Function、Ordinary Function四种)

Sample Input

1 1 2 2 2 3 1 -4 0

Sample Output

Case #1: Even Function Case #2: Ordinary Function

Hint

还记得曾经的数学吗?

Source

Keys

中国地质大学(北京)第五届程序设计竞赛现场决赛(网络同步赛)
http://acm.cugb.edu.cn/JudgeOnline/showproblem?problem_id=1316
原来想取11个点直接判断值无法通过,后面考虑是因为指数很大可能溢出。下面是常规的做法


#include
#include
#include

int a[100], expo[100];
int vis[100];
int expo_new[100];

int main(void)
{
    int i, j, n;
    int sum, cas = 0, cnt;

    while(scanf("%d", &n), n > 0){
        cas++;
        cnt = 0;
        for(i = 0; i < n; i++){
            scanf("%d%d", &a[i], &expo[i]);
        }

        //去重复,系数不为0则加入新数组
        memset(vis, 0, sizeof(vis));
        for(i = 0; i < n; i++){            
            if(vis[i]) continue;
            vis[i] = 1;
            sum = a[i];
            for(j = i + 1; j < n; j++){
                if(expo[j] == expo[i]){
                    vis[j] = 1;
                    sum += a[j];
                }
            }
            if(sum){
                expo_new[cnt] = expo[i];
                cnt++;                
            }
        }

        if(cnt == 0){        
            printf("Case #%d: Particular Function\n", cas);
            continue;
        }

        sum = 0;
        for(i = 0; i < cnt; i++)
            sum += abs(expo_new[i]) % 2; //负整数对2取余-1,另一绕开方法是只考虑取余为0
        if(sum == 0)    
            printf("Case #%d: Even Function\n", cas);
        else if(sum == cnt)
            printf("Case #%d: Odd Function\n", cas);
        else
            printf("Case #%d: Ordinary Function\n", cas);
    }
    return 0;
}
阅读(926) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~