2019年9月27日实验题目题解

2019年9月27日实验题目题解

退役老年人瑟瑟发抖,退役时间久了,居然会被萌新吊着打。我太难了!!!还有c++大法好,c真心不习惯

怎么评价今天的题呢,个人觉得很无聊,各种考格式问题,OI中所有忽略文本空格什么的全部没开,而且也是我第一次在ACM网站上做题,很不习惯,有的题目调了四五次,成绩并不好,被有些刚接触的萌新吊打了,太羞耻了!!!

下面进入正题

总共十道题,都是最简单的大水题

A题

Description
Xiao_ming有两个哥哥,大哥叫Da_min,二哥叫Er_min。三兄弟放学回家,父母分别跟他们打招呼。
Input

Output
Hello Da_min,
Hello Er_min,
Hello Xiao_ming!
分析:就是要输出三行字符,直接复制粘贴就好,注意换行符,不要多加不要少加,这就是今天的题目的坑点
标程

#include<stdio.h>

int main(){
    printf("Hello Da_min,\n");
    printf("Hello Er_min,\n");
    printf("Hello Xiao_ming!");
    return 0;
}

很简单就是别再最后一行输出再输出一个换行符就行

B题

Description
I/O是Input/Output的缩写,是“输入与输出”的意思。
从键盘输入一个整数,然后输出这个整数。
Input
一个整数,在int类型的表示范围内。
Output
输入的整数。
Sample Input
10
Sample Output
10
分析
很水,输入一个数,再把它输出来就行了。新手注意取地址符别忘了,也别多加
标程

#include<stdio.h>

int main(){
    int i;
    scanf("%d",&i);
    printf("%d",i);
    return 0;
}

C题

Description
输出一行“Hello world!”。
Input

Output
Hello world!
Sample Input
Sample Output
Hello world!
分析
每个程序猿入门的第一题,很简单,只有一句话,输出就行了。
标程

#include<stdio.h>

int main(){
    printf("Hello world!");
    return 0;
}

D题
Description
给出长方体的长、宽、高,求其体积。
Input
输入三个浮点数,分别表示长方体的长、宽、高。
Output
输出体积,不输出无意义的0。
Sample Input
3 4 5
Sample Output
60
分析
三个数乘起来就行了,但是题目说的是浮点数,得用double(float就忘了吧),double是lf。并且为了不输出无意义的0,也就是说不允许输出0.100,必须是0.1.输出不能是%d而是%g(第一次见,记住就好了)。
标程

#include<stdio.h>

int main(){
    double a,b,c;
    scanf("%lf%lf%lf",&a,&b,&c);
    double v=a*b*c;
    printf("%g",v);
    return 0;
}

E题

Description
求3个数的平均值。
Input
输入只有一行,为3个较小的整数。
Output
输出为这3个整数的平均值,保留3位小数。
Sample Input
1 2 3
Sample Output
2.000
HINT
注意除法运算对整型数据和浮点型数据是不一样的。
分析
题目中提示了,浮点数运算和整数运算不同,重点就在除3的部分,由于输入的是整数,输出的是小数,除的数不能是3而应该是3.0.这个地方注意一下(我交的时候也忘了这里,WA了几次,才想起来,好久不打OI了啊)还有保留三位小数用.3f
标程

#include<stdio.h>

int main(){
    int a,b,c;
    scanf("%d%d%d",&a,&b,&c);
    double i=(a+b+c)/3.0;
    printf("%.3lf",i);
    return 0;
}

F题

Description
从键盘输入3个字符(不含双字节字符),分别输出每个字符的十进制值(ASCII码)、八进制值和十六进制值。
Input
输入为3个字符。
Output
输出为3行。
每一行为每个字符(对应输入顺序)的十进制、八进制和十六进制值,用空格分隔开。每个输出的值占3个字符,不足3个字符前面补0。
Sample Input
0 A(这是0空格A)
Sample Output
048 060 030
032 040 020
065 101 041
分析
这里使用一个函数getchar()可以读入一个字符。还有是输出问题。
十进制是%d
八进制是%o
十六进制是%x
之后是高位补零,让ASCLL码都为三位:%03d就可以了。
就是这几个点需要注意一下就行了。
标程

#include<stdio.h>

int main(){
    char a=getchar(),b=getchar(),c=getchar();
    printf("%03d %03o %03x\n",a,a,a);
    printf("%03d %03o %03x\n",b,b,b);
    printf("%03d %03o %03x",c,c,c);
}

G题

Description
输入2个整数,按照指定的格式输出这两个数。
Input
两个整数0<=a,b<=1000。a与b之间用一个空格隔开。
Output
输出有3行,第一行是:“Octal Decimal Hexadecimal”,每个单词之间用空格隔开。第二行和第三行分别是输入的两个整数a、b的八进制数、十进制数和十六进制数。输出时,每个数字左对齐,且八进制、十进制和十六进制数据分别与第一行中的字母O、D、H对齐。
Sample Input
13 456
Sample Output
Octal Decimal Hexadecimal
15 13 d
710 456 1c8
分析
这是今天最毒的一道题。基本上所有人在这道题上的提交次数是全场最高的,今天AC的里面交这道题最多交了11次。。。
这道题很恶心,格式问题。。
输出进制的时候第三个数据不能输出空格。。。
竟然不忽略行末空格。。
还有就是如何让数据对齐:右对齐是%Xd(x是数据总共的长度)。左对齐是%-Xd。
标程

#include<stdio.h>

int main(){
    int a,b;
    scanf("%d%d",&a,&b);
    printf("Octal Decimal Hexadecimal\n");
    printf("%-6o%-8d%x\n",a,a,a);
    printf("%-6o%-8d%x",b,b,b);
}

H题

Description
计算两整数x和y(0<x,y<1000)的和、差、积、商、余数、x的平方和y的三次方。
Input
输入只有一行,格式见sample。
Output
输出为多行,按顺序每行输出x,y的和、差、积、商、余数、x的平方和y的三次方,格式见sample
Sample Input
x = 11, y = 3
Sample Output
x + y : 14
x - y : 8
x * y : 33
x / y quotient: 3, remainder: 2
x ^ 2 : 121
y ^ 3 : 27
HINT
注意输入输出格式。了解C语言整数除法运算符的特点,并且没有求幂的运算符。
分析
这道题的提示很重要。
c没有乘方函数,也就是pow函数。。(c++ STL大法好!!!)
其他的很简单
简单的模拟
附:
乘方函数

inline int pow(x,y){
	int ans=1;
	for(register int i=0;i<y;++i){
		ans*=x;
	} 
}

快速幂

//快速幂模板 
#include<iostream>
#include<cstdio>
using namespace std;
long long b,p,k,ans;
long long fast(long long b,long long p,long long k){//快速幂取余 
    long long deal=1;
    while(p!=0){
        if(p&1){
        	deal=(deal*b)%k;
		} 
        b=(b*b)%k;
        p>>=1;
    }
    return deal;
}
long long poww(long long b,long long p){//快速幂 
    long long deal=1;
    while(p!=0){
        if(p&1){
        	deal=deal*b;
		} 
        b=b*b;
        p>>=1;
    }
    return deal;
}
int main(){
	scanf("%d%d%d",&b,&p,&k);
    cout<<b<<"^"<<p<<" mod "<<k<<"="<<fast(b,p,k)<<" "<<poww(b,p);
    return 0;
}

标程

#include<stdio.h>

int main(){
    int a,b;
    scanf("x = %d, y = %d",&a,&b);
    printf("x + y : %d\n",a+b);
    printf("x - y : %d\n",a-b);
    printf("x * y : %d\n",a*b);
    printf("x / y quotient: %d, remainder: %d\n",a/b,a-b*(a/b));
    printf("x ^ 2 : %d\n",a*a);
    printf("y ^ 3 : %d",b*b*b);
}

I题

Description
输入一个整数,判读它是奇数还是偶数。
Input
输入只有一行,为一个100以内的正整数。
Output
输出为一行。
若输入为偶数则输出“even”,奇数输出“odd”。
Sample Input
30
Sample Output
even
分析
很简单%一下2就行了
或者用与&运算符,&一下1如果等于0就是偶数不等于0就是奇数
标程

#include<stdio.h>

int main(){
    int x;
    scanf("%d",&x);
    if(x%2==0){
        printf("even");
    }
    else{
        printf("odd");
    }
}

或者

#include<stdio.h>

int main(){
    int x;
    scanf("%d",&x);
    if((x&1)==0){
        printf("even");
    }
    else{
        printf("odd");
    }
}

注意&的优先级顺序
这里也可以用三目运算符
x%2?printf(“odd”):printf(“even”);
大概这样写就ok了
个人更喜欢用if语句,在卡常数的话三目运算符略快于if但是没啥必要

J题

Description
求整型数据和浮点型数据的绝对值。
Input
输入两个数,第一个是整数,第二个是浮点数。
Output
输出为两行,第一行为整数的绝对值,第二行为浮点数的绝对值,注意浮点数的绝对值不输出无意义的0。
Sample Input
-1
1
Sample Output
1
1
分析
c自带函数abs和fabs
但是为了跑的更快,不被卡常数!!
手写函数!!!
很简单,记住头文件就行
标程

手动代替

#include<stdio.h>

int main(){
    int x;
    double y;
    scanf("%d",&x);
    scanf("%lf",&y);
    if(x<0){
        printf("%d\n",-x);
    }
    else{
        printf("%d\n",x);
    }
    if(y<0){
        printf("%g",-y);
    }
    else{
        printf("%g",y);
    }
    return 0;
}

手写函数

#include<stdio.h>

inline int abs(int x){
    if(x<0){
        return -x;
    }
    return x;
}
inline double fabs(double x){
    if(x<0){
        return -x;
    }
    return x;
} 

int main(){
    int x;
    double y;
    scanf("%d",&x);
    scanf("%lf",&y);
    printf("%d",ans(x));
    printf("%g",fabs(y));
    return 0;
}

我就是不用自带函数!!!

退役老年人太难了,居然被吊打

发布了41 篇原创文章 · 获赞 58 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/a1351937368/article/details/101570487
今日推荐