ZZUIL题解1031-1040

1031: 判断点在第几象限

1032:员工薪水

1033: 五级制成绩

1034: 夏季促销

1035: 分段函数求值

1036:某年某月有多少天

1037:四则运算

1038: 绝对值最大

1039:n个数求和

1040:数列求和1

1031: 判断点在第几象限

题目描述

从键盘输入2个整数x、y值,表示平面上一个坐标点,判断该坐标点处于第几象限,并输出相应的结果。

输入

输入x,y值表示一个坐标点。坐标点不会处于x轴和y轴上,也不会在原点。

输出

输出对应的象限,用数字1,2,3,4分别对应四个象限。>

样例输入 Copy

1 1

样例输出 Copy

1

解题思路:

根据每一个象限横坐标纵坐标的正负号判断即可

AC代码:

#include<stdio.h>
int main(){
    double x,y;
    scanf("%lf %lf",&x,&y);
    if(x>0&&y>0)
        printf("1\n");
    else if(x<0&&y>0)
        printf("2\n");
    else if(x<0&&y<0)
        printf("3\n");
    else
        printf("4\n");
    return 0;
} 

1032: 员工薪水

题目描述

某公司规定,销售人员工资由基本工资和销售提成两部分组成,其中基本工资是1500元/月,销售提成规则如下:
销售额小于等于10000元时,按照5%提成;
销售额大于10000元但小于等于50000元时,超出10000部分按照3%提成;
销售额大于50000元时,超出50000部分按照2%提成。
编写程序,根据销售额计算员工收入。

输入

输入一个整数表示销售额

输出

输出员工的薪水,保留2位小数。

样例输入 Copy

30000

样例输出 Copy

2600.00

解题思路:

根据题目要求对相应销售额部分,计算出相应的提成,然后想加。注意分类

AC代码:

#include<stdio.h>
int main(){
    int salary;
    double total=1500;//基础工资 
    scanf("%d",&salary);
    if(salary<=10000)
        total+=salary*0.05;
    else if(salary<=50000)
        total+=10000*0.05+(salary-10000)*0.03;
    else
        total+=10000*0.05+40000*0.03+(salary-50000)*0.02;
    printf("%.2f\n", total);
    return 0;
} 

1033五级制成绩

题目描述

给定一个百分制成绩, 请根据百分制成绩输出其对应的等级。转换关系如下:
90分及以上为’A’,80~89为’B’, 70~79为’C’, 60~69为’D’,60分以下为’E’。

输入

一个百分制成绩(0~100的整数)。

输出

输出对应的等级。

样例输入 Copy

100

样例输出 Copy

A

解题思路:

用几个if else 判断一下就完事了

AC代码:

#include<stdio.h>
int main(){
    int score;
    scanf("%d",&score);
    if(score<60)
        printf("E\n");
    else if(score>=60&&score<=69)
        printf("D\n");
    else if(score>=70&&score<=79)
        printf("C\n");
    else if(score>=80&&score<=89)
        printf("B\n");
    else
        printf("A\n");
    return 0;
} 

1034: 夏季促销

题目描述

商场夏季促销,购物500元以下,不打折;购物500元(含)以上,95折;购物1000元(含)以上,9折;购物3000元(含)以上,85折;购物5000元(含)以上,8折。根据消费金额,确定用户实际需要支付的数目。

输入

输入一个实数,表示消费金额。

输出

输出一个实数,表示用户实际需要支出的数目,保留两位小数。

样例输入 Copy

5100

样例输出 Copy

4080.00

解题思路:

按照促销要求进行相应的折扣即可

AC代码:

#include<stdio.h>
int main(){
    int money;
    double total;
    scanf("%d",&money);
    if(money<500)
        total=money;
    else if(money>=500&&money<1000)
        total=money*0.95;
    else if(money>=1000&&money<3000)
        total=money*0.90;
    else if(money>=3000&&money<5000)
        total=money*0.85;
    else
        total=money*0.80;
    printf("%.2f\n", total);
    return 0;
} 

1035: 分段函数求值

题目描述

已知:y是x的函数,
当x<-2时,y=7-2x;
当x>=-2,且x<3时,y=5-|3x+2|;
当x>=3时,y=3x+4

输入

任意输入一个整数x。

输出

输出为一个整数,即x对应的函数值。

样例输入 Copy

2

样例输出 Copy

-3

解题思路:

按照要进行分段求出函数值即可

AC代码:

#include<stdio.h>
#include<math.h>
int main(){
    int x,y;
    scanf("%d",&x);
    if(x<-2)
        y=7-2*x;
    else if(x>=-2&&x<3)
        y=5-fabs(3*x+2);
    else
        y=3*x+4;
    printf("%d\n",y);
    return 0;
} 

1036: 某年某月有多少天

题目描述

给你一个年份和月份,求该月有多少天

输入

一个年份(正整数),一个月份(1-12),中间有一个空格隔开

输出

该月的天数,单独占一行。

样例输入 Copy

2012 2

样例输出 Copy

29

解题思路:

1,3,5,7,8,10,12每一个月份都是31天
4,6,9,11每一个月30天
2月闰年29天非闰年28天

AC代码:

#include<stdio.h>
#include<math.h>
int main(){
    int year,month,day;
    scanf("%d %d",&year,&month);
    if(month==4||month==6||month==9||month==11)
        day=30;
    else if(month==2){
        if((year%400==0)||(year%4==0&&year%100!=0))
            day=29;
        else
            day=28;
    }
    else
        day=31;
    printf("%d\n",day);
    return 0;
} 

1037: 四则运算

题目描述

给你一个简单的四则运算表达式,包含两个实数和一个运算符,请编程计算出结果

输入

表达式的格式为:s1 op s2, s1和s2是两个实数,op表示的是运算符(+,-,*,/),也可能是其他字符。注意运算符两侧各有一个空格。

输出

如果运算符合法,输出表达式的值;若运算符不合法或进行除法运算时除数是0,则输出"Wrong input!"。最后结果小数点后保留两位。

样例输入 Copy

1.0 + 1.0

样例输出 Copy

2.00

解题思路:

进行对应的加减乘除即可只是对于分母是0的情况需要用fabs(s2)<1e-10判断

AC代码:

#include<stdio.h>
#include<math.h>
int main()
{
    double s1,s2,result=0;
    char op;
    int flag=0;
    scanf("%lf %c %lf",&s1,&op,&s2);
    if(op=='+')
        result=s1+s2;
    else if(op=='-')
        result=s1-s2;
    else if(op=='*')
        result=s1*s2;
    else if(op=='/')
        if(fabs(s2)<1e-10)
        flag=1;
        else
        result=s1/s2;
    else
        flag=1;
    if(flag==0)
    printf("%.2f\n",result);
    else
    printf("Wrong input!");
    return 0;
} 

1038: 绝对值最大

题目描述

输入3个整数,输出绝对值最大的那个数。

输入

输入包含3个int范围内的整数,用空格隔开。

输出

输出三个数中绝对值最大的数,单独占一行。若绝对值最大的数不唯一,则输出最先出现的那个。例如,若输入为1 -3 3,则输出为-3;若输入为1 3 -3则输出为3。

样例输入 Copy

1 2 -3

样例输出 Copy

-3

解题思路:

三个数比较大小一样,只不过比较的时候加上绝对值就行,但是在数值交换的时候需要交换原数值(题目要求输出原数),
按顺序输出只需要在第二个和第三个进行比较的时候如果numb2等于numb3就可以保证即使相等也是输出最先出现的那一个

AC代码:

#include<stdio.h>
#include<math.h> 
int main(){
    int numb1,numb2,numb3,temp;
    scanf("%d %d %d", &numb1,&numb2,&numb3);
    if(fabs(numb1)>=fabs(numb2)){
    temp=numb1;
    numb1=numb2;
    numb2=temp; 
    }
    if(fabs(numb2)>=fabs(numb3)){
    temp=numb2;
    numb2=numb3;
    numb3=temp; 
    }
    printf("%d\n", numb3);
    return 0;
} 

1039: n个数求和

题目描述

输入一个整数n和n个整数,输出这n个整数的和。

输入

输入有两行:第一行是一个正整数n,第二行是n个整数。

输出

输出一个整数,即n个数的和。输出单独占一行。

样例输入 Copy

3
7 3 2

样例输出 Copy

12

解题思路:

用一个循环直接搞定

AC代码:

#include<stdio.h>
#include<math.h> 
int main(){
    int i,n,num,total=0;
    scanf("%d", &n);
    for(i=0; i<n; i++){
        scanf("%d", &num);
        total+=num;
    }
    printf("%d\n", total);
    return 0;
} 

1040: 数列求和1

题目描述

输入一个整数n,输出数列1+1/3+1/5+……前n项的和。

输入

输入只有一个正整数n。

输出

结果保留2位小数,单独占一行

样例输入 Copy

3

样例输出 Copy

1.53

解题思路:

需要注意定义的时候需要把分母定义为小数(整数/小数或者小数/小数结果才会是小数)

AC代码:

#include<stdio.h>
int main(){
    int i,n;
    double total,n1=1.0;
    scanf("%d", &n);
    for(i=1; i<=n; i++){
        total+=1/n1;
        n1+=2;
    }
    printf("%.2f\n", total);
    return 0;
} 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
这是一道经典的位运算题目,考察对二进制的理解和位运算的熟练程度。 题目描述: 给定一个长度为 $n$ 的数组 $a$,初始时每个数的值都为 $0$。现在有 $m$ 个操作,每个操作为一次询问或修改。 对于询问,给出两个整数 $l,r$,求 $a_l \oplus a_{l+1} \oplus \cdots \oplus a_r$ 的值。 对于修改,给出一个整数 $x$,表示将 $a_x$ 的值加 $1$。 输入格式: 第一行两个整数 $n,m$。 接下来 $m$ 行,每行描述一次操作,格式如下: 1 l r:表示询问区间 $[l,r]$ 的异或和。 2 x:表示将 $a_x$ 的值加 $1$。 输出格式: 对于每个询问操作,输出一个整数表示答案,每个答案占一行。 数据范围: $1 \leq n,m \leq 10^5$,$0 \leq a_i \leq 2^{30}$,$1 \leq l \leq r \leq n$,$1 \leq x \leq n$ 输入样例: 5 5 2 1 2 3 1 2 4 2 2 1 1 5 输出样例: 0 2 解题思路: 对于询问操作,可以利用异或的性质,即 $a \oplus b \oplus a = b$,将 $a_l \oplus a_{l+1} \oplus \cdots \oplus a_r$ 转化为 $(a_1 \oplus \cdots \oplus a_{l-1}) \oplus (a_1 \oplus \cdots \oplus a_r)$,因为两个前缀异或后的结果可以相互抵消,最后的结果即为 $a_1 \oplus \cdots \oplus a_{l-1} \oplus a_1 \oplus \cdots \oplus a_r = a_l \oplus \cdots \oplus a_r$。 对于修改操作,可以将 $a_x$ 对应的二进制数的每一位都分离出来,然后对应位置进行修改即可。由于只有加 $1$ 操作,所以只需将最后一位加 $1$ 即可,其余位不变。 参考代码:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮皮皮皮皮皮卡乒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值