湖南中医药大学OJ—1110到1119

1110: 例题2-3 判断闰年

题目描述
输入一个2000至2500年间(包含2000年和2500年)的任意年份,判断是否是闰年。
输入:
输入一个整数year,表示年份。输入保证2000≤year≤2500。
输出:
如果输入的年份是闰年,请输出“leap year”,否则请输出“not leap year”。
请注意不需要输出引号,行尾输出换行。

样例输入
2000
样例输出
leap year

闰年:能够被4整除但不能被100整除,或者被400整除的年份叫做闰年。

include <stdio.h>
int main()
{
    
    
    int y;
    scanf("%d",&y);
    if((y%4==0&&y%100!=0)||y%400==0)
        printf("leap year\n");
    else
        printf("not leap year\n");
    return 0;
}

1111: 例题2-4 简单公式计算

题目描述
计算1-(1)/(2)+(1)/(3)-(1)/(4)+⋯+(1)/(99)-(1)/(100)
输出
输出题目描述中表达式的值,使用C语言默认舍入方式保留8位小数。请注意行尾输出换行。

样例输出 Copy
0.68817218

#include<stdio.h>
int main()
{
    
    
    double sum=0;
    int a=1,i;
    for(i=1;i<101;i++)
    {
    
    
        sum+=(1.0*a/i);//乘1.0的目的是使除出来的数不会强制转为int类型
        a=-a;
    }
    printf("%.8lf\n",sum);
         
}

1112: 例题2-5 判断素数

题目描述
输入一个大于等于3的正整数,判断其是否是素数。
输入
一个大于等于3并小于10000的正整数n。
输出
如果n是素数,输出“prime”,否则请输出“not prime”。
请注意不需要输出引号,行尾输出换行。

样例输入
17
样例输出
prime

素数:也叫质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,比如:2,3,5,7,11…
下面的是错误程序但是能通过OJ,应该是学校OJ的数据比较少
如果输入9,会因为直接通过第一个if语句然后输出,导致程序达不到预想效果

#include<stdio.h>
int main()
{
    
    
    int a,b;
    //printf("输入一个大于或等于3的正整数: ");
    scanf("%d",&a);//如果输入9,判断为素数,所以此程序错误。
    for(b=2;b<a;b++)
    {
    
    
        if(a%b!=0)
          //printf("%d是素数",a);
          printf("prime");
        else printf("not prime");break;
    }
    printf("\n");
        return 0;
}

正确示范:

#include<stdio.h>
int main()
{
    
    
    int a,b,flag=0;
    //printf("输入一个大于或等于3的正整数: ");
    scanf("%d",&a);
    for(b=2;b<a;b++)
    {
    
    
        if(a%b!=0)
          flag=0;//标记为素数(必须全部小于a的数全部判断玩才能最终判断为素数)
        else
        {
    
    
            flag=1;//为非素数
            printf("not prime\n");
            break;//跳出循环,结束程序
        }
    }
    if(flag==0)
        printf("prime\n");
    return 0;
}

1113: 习题2-4-2 多数求最大值

题目描述
输入10个整数,输出其中最大的数。
输入:
输入包含10行,每一行一个整数。
输出:
请输出读入的10个数中的最大值。请注意行尾输出换行。

样例输入
10
6
19
35
50
107
10
-25
11
51
样例输出
107

#include<stdio.h>
int main()
{
    
    
    int a[10],t,i,max;
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    max=a[0];//暂时先假定a[0]最大
    for(i=0;i<10;i++)
    {
    
    
        if(max<a[i])//如果a[i]大于max,就交换两个数值,使最大值max保持当前最大
        {
    
    
            t=a[i];
            a[i]=max;
            max=t;
        }
        else continue;//可去掉
    }
    printf("%d\n",max);
    return 0;
}

1114: 习题2-4-3 三个数排序输出

题目描述
输入3个整数a、b、c,按从小到大的顺序输出。
输入:
输入包含一行,包含三个用空格隔开的整数。
输出:
请按从小到大的顺序输出读入的三个数。请注意行尾输出换行。

样例输入
18 11 34
样例输出
11 18 34

#include<stdio.h>
int main()
{
    
    
    int a,b,c,t;
    scanf("%d %d %d",&a,&b,&c);
    if(a>b)//如果a>b就交换a和b的值,保证a最小
    {
    
    
        t=b;
        b=a;
        a=t;
    }
    if(b>c)//如果b>c就交换b和c的值,保证b最小
    {
    
    
        t=b;
        b=c;
        c=t;
    }
    printf("%d %d %d\n",a,b,c);
    return 0;
}

1115: 习题2-4-4 连续多数求和

题目描述
求1+2+3+…+100的值。
输入:

输出:
输出题目描述中表达式的值。请注意行尾输出换行。

样例输入

样例输出
5050

#include<stdio.h>
int main()
{
    
    
    int n=0,a=100,sum=0;
    while(a--)//用for循环也可以实现
    {
    
    
        n++;
        sum+=n;
    }
    printf("%d\n",sum);
    return 0;
}

1116: 习题2-4-5 判断整除

题目描述
判断一个整数能否同时被3和5整除。
输入:
一个整数n。
输出:
如果n是能同时被3和5整除,输出“can”,否则请输出“cannot”。
请注意不需要输出引号,行尾输出换行。

样例输入 Copy
14
样例输出 Copy
cannot

#include<stdio.h>
int main()
{
    
    
    int n;
    scanf("%d",&n);
    if(n%3==0&&n%5==0)//就取余操作的练习
        printf("can\n");
    else printf("cannot\n");
    return 0;
}

1117: 习题2-4-6 判断素数

题目描述
输出100至200之间的所有素数。
输入:

输出:
每一个素数一行。

样例输入 Copy

样例输出 Copy
101
103
107
109
113
127
131
137
139
149
151
157
163
167
173
179
181
191
193
197
199

参考上面1122的判断素数

#include<stdio.h>
 
int main() 
{
    
     
    int i = 0; 
    int j = 0; 
    int flag= 0; 
    for(i=100;i<=200;i++)//for循环语句 
    {
    
     
        flag= 0;//每次找出一个数就将count重置为0 
        for(j=2;j<i;j++)//for循环语句 
        {
    
     
            if(i%j == 0)//取余,余数为0 
                flag = 1;//count为1 
         } 
         if(flag == 0)//若count为0,输出i 
             printf("%d\n",i); 
    } 
    printf("\n"); 
    return 0; 
}

1118: 习题2-4-7 求最大公约数

题目描述
读入两个正整数m和n,计算m和n的最大公约数。
输入:
两个空格隔开的正整数m和n。
输出:
m和n的最大公约数。注意行尾输出换行。

样例输入 Copy
35 14
样例输出 Copy
7

**最大公约数:**最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个,求最大公约数有多种方法,常见的有质因数分解法、短除法、辗转相除法、更相减损法(自行了解学习)

#include<stdio.h>
int main()
{
    
    
    int m,n,c;
    scanf("%d %d",&m,&n);
    while(m%n!=0)
    {
    
    
        c=m%n;
        m=n;
        n=c;
    }
    printf("%d\n",n);   
    return 0;
}

1119: 习题2-4-8 一元二次方程求根

题目描述
求方程式ax2+bx+c=0的根。
输入:
三个用空格隔开的整数a、b、c,分别表示一元二次方程的系数,并保证a不为0。
输出:
方程式ax2+bx+c=0的根,若有两个不同的实根,则输出这两个实根,用空格隔开;若有一个实根,请直接输出;若没有实根,请输出“no answer”(请注意不需要输出引号)。所有的实数输出请使用C语言的默认舍入方式保留4位小数,注意行尾输出换行。

样例输入 Copy
8 -25 4
样例输出 Copy
0.1692 2.9558

#include<stdio.h> 
#include<math.h>//头文件,为了后面能使用sqrt函数
int main()
{
    
    
    int a,b,c;
    float x,y,z;
    scanf("%d %d %d",&a,&b,&c);
    z=b*b*1.0-4*a*c*1.0;
    if(a==0)//判断数字是否合理
        return 0;
    else if(z>0)
    {
    
    
        x=(-b+sqrt(z))/(2*a);//sqrt就是求平方根
        y=(-b-sqrt(z))/(2*a);
        printf("%.4f %.4f\n",y,x);  
    }
    else if(z==0)
    {
    
    
        x=-b/(2*a);
        printf("%.4f\n",x);
    }
    else if(z<0)
    {
    
    
        printf("no answer\n");
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_43337254/article/details/109536208