宇宙射线 题解

YAOI Round #26 (Div.1+Div.2) A. 宇宙射线


分析

首先本题正解不是打表……虽然部分打表可以过这题而且也不难。

首先可以发现这个数的百位可以单独分出来转换,即将 \(x/100\) 转换为 \(Z\)\(Q\)\(Z\) 的 ASCII 码为 \(90\)(可以输出 (int)'Z' 来知道这个数字),\(Q\) 的 ASCII 码为 \(81\),因此我们可以用 (char)(90-x/100) 来得到百位所对应的字符。

可以看出十位所对应的字符就是原数字除以二。x/10%10 可以得到这个数的十位,将其除以二输出即可。

个位则需要分类讨论:十位为偶数时个位不变,为原数的个位;十位为奇数时则对应 \(A\)\(J\),使用与百位类似的方法:(char)x%10+65

提示:0 的 ASCII 码为 \(48\)putchar 函数可以输出一个字符。


代码

朴实无华的

#include<bits/stdc++.h>
using namespace std;

int main(){
    int x;
    while(scanf("%d",&x)!=EOF){
        putchar(90-x/100);
        printf("%d",x/10%10/2);
        if((x/10%10)%2)putchar(x%10+65);
        else printf("%d",x%10);
        putchar('\n');
	}
    return 0;
}

读写优化的

#include<bits/stdc++.h>
using namespace std;

int read(){
	int w=0,ch=getchar();
	while(ch<'0'||ch>'9'){
		if(ch==-1)return -1;
		ch=getchar();
	}
	while(ch>='0'&&ch<='9')w=w*10+ch-48,ch=getchar();
	return w;
}

int main() {
	int a=read();
	while(a!=-1){
		putchar(90-a/100);
		putchar(a/10%10/2+48);
		putchar(a%20<10?a%10+48:a%10+65);//万恶的三目运算符(
		putchar('\n');
		a=read();
	}
	return 0;
}
posted @ 2022-10-06 18:00  ofbwyx  阅读(62)  评论(0)    收藏  举报