宇宙射线 题解
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;
}

浙公网安备 33010602011771号