21计科一班题单2---题解

题单2—题解

P5710 数的性质

题目描述

一些数字可能拥有以下的性质:
性质 1:是偶数;
性质 2:大于 4 且不大于 12。
小A 喜欢这两个性质同时成立的数字;Uim 喜欢这至少符合其中一种性质的数字;八尾勇喜欢刚好有符合其中一个性质的数字;正妹喜欢不符合这两个性质的数字。

输入格式

输入一个数字 x ( 0 < = x < = 1000 ) x(0<=x<=1000) x(0<=x<=1000)

输出格式

输出这 4 个人是否喜欢这个数字,如果喜欢则输出1,否则输出0,用空格分隔。

输入输出样例

输入

12

输出

1 1 0 0

题目思路

设变量 f l a g flag flag,表示满足两种性质的个数,如果只满足性质1或者性质2, f l a g = 1 flag=1 flag=1,如果满足性质1和性质2, f l a g = 2 flag=2 flag=2,如果都不满足, f l a g = 0 flag=0 flag=0
设四个人分别要满足的条件为 a , b , c , d a,b,c,d a,b,c,d,值为0时不满足条件,值为1时满足条件。

现在判断四种条件对应的 f l a g flag flag值:

条件 a a a:满足两种性质, f l a g = 2 flag=2 flag=2 时, a = 1 a=1 a=1
条件 b b b:满足至少一种, f l a g ⩾ 1 flag\geqslant 1 flag1 时, b = 1 b=1 b=1
条件 c c c:只满足一种, f l a g = 1 flag=1 flag=1时, c = 1 c=1 c=1
条件 d d d:一种都不满足, f l a g = 0 flag=0 flag=0时, d = 1 d=1 d=1

C代码
#include <stdio.h>

int main()
{
    int x;
    scanf("%d",&x);
    int flag = 0;
    if(x % 2 == 0) flag++; //这里表示 flag = flag + 1
    if(x > 4 && x <= 12) flag++;
    int a = 0,b = 0,c = 0,d = 0;
    if(flag==2) a++;
    if(flag>=1) b++;
    if(flag==1) c++;
    if(flag==0) d++;
    printf("%d %d %d %d",a,b,c,d);
    return 0;
}

P5711 闰年判断

题目描述

输入一个年份(大于 1582 的整数 ),判断这一年是否是闰年,如果是输出 1,否则输出 0。

输入输出样例
输入

1926

输出

0

题目思路

判断闰年的方法:

1、非整百年份:能被4整除的是闰年。(如2004年就是闰年,2001年不是闰年)
2、整百年份:能被400整除的是闰年。(如2000年是闰年,1900年不是闰年)
(摘自百度百科)
根据上面的规则直接写代码即可。

C代码
#include <stdio.h>

int main()
{
    int year;
    scanf("%d",&year);
    int flag = 0;
    if(year % 100 == 0) //判断是否为整百年
    {
        if(year % 400 == 0) flag = 1;
    }
    else
    {
        if(year % 4 ==0) flag = 1;
    }
    printf("%d",flag);
    return 0;
}

P5716 月份天数

题目描述

输入年份和月份,输出这一年的这一月有多少天。需要考虑闰年。

输入输出样例
输入

1926 8

输出

31

题目思路

先判断月份是否为2月,如果是2月,则判断一下是不是闰年。
这个题用数组来做比较容易,把12个月的数据存在数组里,但是你们没学过,就用普通的方法来做。

C代码

#include <stdio.h>

int main()
{
    int year,mon;
    scanf("%d %d",&year,&mon);
    if(mon == 2) //如果是2月的话则判断是否为闰年
    {
        //闰年输出29,非闰年输出28
        if(year % 100 == 0)
        {
            if(year % 400 == 0) printf("29"); 
            else printf("28");
        }
        else
        {
            if(year % 4 ==0) printf("29");
            else printf("28");
        }
    }     //一三五七八十、十二月,31天,其它30天
    else if(mon == 4 || mon == 6 || mon == 9 || mon == 11) printf("30");
    else printf("31");
    return 0;
}

P1422 小玉家的电费

题目描述

夏天到了,各家各户的用电量都增加了许多,相应的电费也交的更多了。小玉家今天收到了一份电费通知单。小玉看到上面写:据闽价电[2006]27号规定,月用电量在150千瓦时及以下部分按每千瓦时0.4463元执行,月用电量在151~400千瓦时的部分按每千瓦时0.4663元执行,月用电量在401千瓦时及以上部分按每千瓦时0.5663元执行;小玉想自己验证一下,电费通知单上应交电费的数目到底是否正确呢。请编写一个程序,已知用电总计,根据电价规定,计算出应交的电费应该是多少。

输入格式

输入一个整数,表示用电总计(单位以千瓦时计),不超过10000。

输出格式

输出一个数,保留到小数点后1位(单位以元计,保留到小数点后1位)。
输入

267

输出

121.5

这个题目很简单,按照题目意思来就行了。注意算的时候细心点。

C代码
#include <stdio.h>

int main()
{
    int elc = 0;
    scanf("%d",&elc);
    double ans = 0;
    //电费分为三个阶段收费
    if(elc >= 401)
    {
        ans += (elc - 400) * 0.5663;
        ans += (400 - 150) * 0.4663;
        ans += 150 * 0.4463;
    }
    else if(elc > 150 && elc < 401)
    {
        ans += (elc - 150) * 0.4663;
        ans += 150 * 0.4463;
    }
    else ans = elc * 0.4463;
    printf("%.1lf",ans);
    return 0;
}

P1424 小鱼的航程(改进版)

题目描述

有一只小鱼,它平日每天游泳 250 公里,周末休息(实行双休日),假设从周 x ( 1 ≤ x ≤ 7 ) x(1≤x≤7) x(1x7)开始算起,过了 n ( n ⩽ 1 0 6 ) n(n\leqslant 10^6) n(n106)天以后,小鱼一共累计游泳了多少公里呢?

输入格式

输入两个整数x,n(表示从周x算起,经过n天)。

输出格式

输出一个整数,表示小鱼累计游泳了多少公里。

输入输出样例

输入

3 10

输出

2000

题目思路

1.此题可以先找出数学表达式,然后直接计算求解。
第一步:
将第一周剩余的天数剔除,剩余天数为 k = n − ( 7 − x + 1 ) k=n - (7 - x + 1) k=n(7x+1),k如果小于0,则让k为0。
计算出n天里有多少个完整的周 a 1 = k / 7 a1=k/7 a1=k/7
然后计算出这些完整的周里一共游了多少公里(每周游5天) a n s 1 = a 1 ∗ 250 ∗ 5 ans1=a1*250*5 ans1=a12505
第二步:
算出结束的那一天是周几 k % 7 k\%7 k%7
如果 k % 7 > 5 k\%7>5 k%7>5,则 a n s 2 = 5 ∗ 250 ans2=5*250 ans2=5250
否则 a n s 2 = k % 7 ∗ 250 ans2=k\%7*250 ans2=k%7250
第三步:
算出刚开始的那一周游了多远
a n s 3 = ( 5 − x + 1 ) ∗ 250 ans3=(5-x+1)*250 ans3=(5x+1)250
如果 a n s 3 ans3 ans3是负数,则说明第一周刚开始在周末,则让 a n s 3 ans3 ans3 0 0 0
最后:
a n s = a n s 1 + a n s 2 + a n s 3 ans=ans1+ans2+ans3 ans=ans1+ans2+ans3

C代码
#include <stdio.h>

int main()
{
    int n,x;
    scanf("%d %d",&x,&n);
    int a1,ans1,ans2,ans3,ans,k;
    k = n - (7 - x + 1)  > 0 ? n - (7 - x + 1) : 0;
    a1 = k/7;
    ans1 = a1*250*5;
    
    if (k % 7  > 5) ans2 = 5*250;
    else ans2 = (k % 7) * 250;
    
    ans3 = (5 - x + 1) * 250;
    if(ans3 < 0) ans3 = 0;
    ans = ans1 + ans2 + ans3;
    printf("%d",ans);
    return 0;
}

2.有一种非常简单的方法,就是暴力模拟小鱼每天的游行情况,如果当天是周六和周日,则不游,否则游250公里。
考虑每个周日,它的数值一定是7的倍数,则每个周六,其值加1也是7的倍数。
因此判断x%7 != 0 && (x + 1)%7 != 0,则既不是周六也不是周日

C代码
#include <stdio.h>

int main()
{
    int n,x;
    scanf("%d %d",&x,&n);
    int i = 0;
    int ans = 0;
    for(i = 0; i < n ; i++,x++)
    {
        //如果当天既不是周六,也不是周日,则游250
        if((x + 1)%7!=0 && x%7!=0) ans += 250;
    }
    printf("%d",ans);
    return 0;
}

P5718 找最小值

给出 n ( n < = 100 ) n(n<=100) n(n<=100),和 n n n个整数 a i ( 0 < = a i < = 1000 ) a_i(0<=a_i<=1000) ai(0<=ai<=1000),求这 n n n个整数中最小值是什么。
输入

8
1 9 2 6 0 8 1 7

输出

0

定义一个变量min_num,用于存储最小值,将这个变量初始化为无穷大的数字,这里由于a只取1000,所以将这个变量初始化为大于1000的数。
然后读取数字,只要读取的数字小于min_num,则将min_nuim更新为该数字,最后保留下来的就是最小值。

C代码
#include <stdio.h>

int main()
{
    int n;
    scanf("%d",&n);
    int min_num = 1001; //用于记录最小值
    int i;
    for(i = 0; i < n ; i++)
    {
        int tmp;
        scanf("%d",&tmp);//将数字读取
        //只要读取的数字比记录的最小值还要小,则将记录的最小值更新为更小的
        if(tmp < min_num) min_num = tmp;
    }
    printf("%d",min_num);
    return 0;
}

P5721 数字直角三角形

给出 n ( 1 < = n < = 13 ) n(1<=n<=13) n(1<=n<=13),请输出一个直角边长度是 n n n的数字直角三角形。所有数字都是 2 位组成的,如果没有 2 位则加上前导 0。
输入

5

输出
0102030405
06070809
101112
1314
15

题目思路

这种题以后会遇到很多,核心思想就是找规律
比如这个题的规律就是输入n,就输出n行,第一行有n个元素,以后的每一行元素个数减一。

#include <stdio.h>

int main()
{
    int n;
    scanf("%d",&n);
    int row = n; //用于记录行
    int col = n; //用于记录列
    int i,j,cnt = 1;
    for(i = 0; i < row ; i++)
    {
        for(j = 0; j < col ; j++)
        {
            printf("%02d",cnt);
            cnt ++;
        }
        col--;
        printf("\n");
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值