跳转至

Contest 5

符号函数
Description
本题要求实现符号函数sign(x)。
函数接口定义:
int sign( int x );
其中x是用户传入的整型参数。符号函数的定义为:若x大于0,sign(x) = 1;若x等于0,sign(x) = 0;否则,sign(x)=−1。
Input
一个整数x。
Output
sign(x)的值
Sample Input 1 
10
Sample Output 1
1
#include <stdio.h>
int sign(int x);
int main()
{
    int x;
    scanf("%d",&x);
    printf ("%d",sign(x));
    return 0;
}
int sign(int x)
{
    /*这儿不能再写int x,因为已在上一行写过,不能重复声明*/
    if (x>0)
    {
        printf("1\n");
    }
    else if (x==0)/*注意两个==号*/
    {
        printf("0\n");
    }
    else 
    {
        printf("-1");
    }
    return x;
}
使用函数求奇数和
Description
本题要求实现一个函数,计算N个整数中所有奇数的和,同时实现一个判断奇偶性的函数。
函数接口定义:
int even( int n );
int OddSum( int List[], int N );
其中函数even将根据用户传入的参数n的奇偶性返回相应值:当n为偶数时返回1,否则返回0。函数OddSum负责计算并返回传入的N个整数List[]中所有奇数的和。
Input
第一行一个整数n。
接下来一行是n个整数的序列。
Output
一个整数,表示奇数和。
Sample Input 1 
6
2 -3 7 88 0 15
Sample Output 1
19
#include <stdio.h>
int a[666],n;
int even(int n){
    if(n<=0)n=~n+1;
    return n%2==1 ? 0:1;
}
int OddSum(int List[],int N){
    int ans=0;
    for(int i=0;i<N;i++){
        if(!even(List[i])){
            ans+=List[i];
        }
    }
    return ans;
}
int main(void) { 
    scanf("%d",&n);
    for(int i=0;i<n;i++){
        scanf("%d",&a[i]);
    }

    printf("%d",OddSum(a,n));
    return 0;
}
使用函数计算两点间的距离
Description
本题要求实现一个函数,对给定平面任意两点坐标(x1,y1)和(x2,y2),求这两点之间的距离。
函数接口定义:
double dist( double x1, double y1, double x2, double y2);
其中用户传入的参数为平面上两个点的坐标(x1, y1)和(x2, y2),函数dist应返回两点间的距离。
Input
一行四个浮点数。
Output
一个浮点数,保留两位小数。
Sample Input 1 
10 10 200 100
Sample Output 1
210.24
#include <stdio.h>
#include <math.h>
double x1,y11,x2,y2;
double dist(double,double,double,double);
int main(void) { 
    scanf("%lf%lf%lf%lf",&x1,&y11,&x2,&y2);
    printf("%.2lf",dist(x1,y11,x2,y2));
    return 0;
}
double dist(double x1,double y11,double x2,double y2){
    return sqrt((x1-x2)*(x1-x2)+(y11-y2)*(y11-y2));
}
使用函数求素数和
Description
本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。
素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。
函数接口定义:
int prime( int p );
int PrimeSum( int m, int n );
其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数PrimeSum返回区间[m,n]内所有素数的和。题目保证用户传入的参数m≤n。
Input
两个整数m和n。(m <= n)
Output
一个整数表示答案。
Sample Input 1 
-1 10
Sample Output 1
17
#include <stdio.h>
int a[666666];
void getprime(int n){
    a[1]=1;
    for(int i=2;i<=n;i++){
        if(a[i])continue;
        for(int j=2;i*j<=n;j++)a[i*j]=1;
    }
}
int PrimeSum(int m,int n){
    int ans=0;
    if(m<=0)m=1;
    for(int i=m;i<=n;i++){
        if(!a[i])ans+=i;
    }
    return ans;
}
int main(){
    int m,n;
    scanf("%d%d",&m,&n);
    getprime(n);
    printf("%d",PrimeSum(m,n));
    return 0;
}
使用函数统计指定数字的个数
Description
本题要求实现一个统计整数中指定数字的个数的简单函数。
函数接口定义:
int CountDigit( int number, int digit );
其中number是不超过长整型的整数,digit为[0, 9]区间内的整数。函数CountDigit应返回number中digit出现的次数。
Input
一行两个整数number和digit。
Output
一行一个整数表示答案。
Sample Input 1 
-21252 2
Sample Output 1
3
#include <stdio.h>
int CountDigit( int number, int digit ){
    if(number<=0)number=~number+1;
    int tmp,ans=0;
    while(number>0){
        tmp=number%10;
        if(tmp==digit)ans++;
        number/=10;
    }
    return ans;
}
int main(){
    int m,n;
    scanf("%d%d",&m,&n);
    printf("%d",CountDigit(m,n));
    return 0;
}
使用函数输出水仙花数
Description
水仙花数是指一个N位正整数(N≥3),它的每个位上的数字的N次幂之和等于它本身。例如:153=1^3+5^3+3^3。 本题要求编写两个函数,
一个判断给定整数是否水仙花数,另一个按从小到大的顺序打印出给定区间(m,n)内所有的水仙花数。
函数接口定义:
int narcissistic( int number );
void PrintN( int m, int n );
函数narcissistic判断number是否为水仙花数,是则返回1,否则返回0。
函数PrintN则打印闭区间[m, n]内所有的水仙花数,每个数字占一行。题目保证100≤m≤n≤10000。
Input
一行两个整数m,n。
Output
从小到大输出若干行,每行一个水仙花数。
Sample Input 1 
153 400
Sample Output 1
153
370
371
#include<stdio.h>
int m,n;
int narcissistic( int number );
void PrintN( int m, int n );
int main(){
    scanf("%d%d",&m,&n);
    PrintN(m,n);
    return 0;
}
void PrintN( int m, int n ){
    int t,digit;
    for (int i = m; i < n; i++){
        int sum = 0,num=i,numm=i,lenn=0;
        while(numm>0){
            lenn++;
            numm/=10;
        }
        while(num > 0){
            t = 1;
            digit = num%10;
            for (int j = 0; j < lenn; j++)
            {
                t *= digit;
            }
            sum += t;
            num = num/10;
        }
        if (sum == i)printf("%d\n",i);
    }
}
使用函数求余弦函数的近似值
Description
本题要求实现一个函数,用下列公式求cos(x)的近似值,精确到最后一项的绝对值小于e:
cos(x)=x^0/0!−x^2/2!+x^4/4!−x^6/6!+⋯
函数接口定义:
double funcos( double e, double x );
其中用户传入的参数为误差上限e和自变量x;函数funcos应返回用给定公式计算出来、并且满足误差要求的cos(x)的近似值。输入输出均在双精度范围内。
Input
两个浮点数e和x。
Output
一个浮点数表示答案,保留6位小数。
Sample Input 1 
0.01 -3.14
Sample Output 1
-0.999899
#include <stdio.h>
#include <math.h>
double funcos(double e,double x){
    double ans=0.0f;
    double xx=1.0f,tmp=x*x,yy=1.0f;
    int i;
    for(i=0;;i+=2){
        double tmp1=xx/yy;
        if((i/2)%2==0)ans+=tmp1;
        else ans-=tmp1;

        if(tmp1<e)break;
        xx*=tmp;
        yy*=((i+1)*(i+2));
    }
    return ans;
}
int main(){
    double e,x;
    scanf("%lf%lf",&e,&x);
    printf("%.6lf",funcos(e,x));
    return 0;
}