0## PTA 7-216 同数异形体
作者 庄波
单位 滨州学院
在自然界中,有些物质由同样的单一化学元素组成,因排列方式不同而具有不同性质,称为同素异形体,比如:钻石和石墨。
类似地,我们把由相同的数字(包括个数)、不同的排列形成的正整数称为同数异形体。
例如:12121 和 11221 均由 3 个 1 和 2 个 2 组成,因此互为“同数异形体”,但 12121 与 1122 则不是。
请编程判断两个数是否是同数异形体。
输入格式:
两个正整数 a 和 b,空格隔开,大小不超过 2
30
。
输出格式:
是否同数异形体的判断结果:
(1)若 a 等于 b,输出 Equal;
(2)若 a 和 b 是同数异形体,则输出 ALIEN;
(3)若 a 和 b 既不相等也不是同数异形体,输出 Different。
输入样例 1:
12121 11221
输出样例 1:
ALIEN
输入样例 2:
12121 1122
输出样例 2:
Different
输入样例 3:
12121 12121
输出样例 3:
Equal
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <stdio.h>
int allotrope(int x, int y){ //判断是否为同数异型体
int flag = 1; //标记是否为同数异型体。默认是
int _xx = x, _yy = y; //表示该整数的最后一位
int _x[10] = {0}, _y[10] = {0}; //记录数字出现的次数
while(x > 0){ //记录第一个整数的数字出现的字数
x %= 10;
_x[x]++;
_xx /= 10;
x = _xx;
}
while(y > 0){ //记录第二个整数的数字出现的字数
y %= 10;
_y[y]++;
_yy /= 10;
y = _yy;
}
for(int i = 0; i < 10; i++){ //比较两个整数的数字出现的字数是否一样
if(_x[i] != _y[i]){
flag = 0;
break;
}
}
return flag;
}
int main(){
int integer, _integer;
scanf("%d %d", &integer, &_integer);
int fl = allotrope(integer, _integer); //调用函数返回是否是同数异型体
if(integer == _integer){ //两个整数相等
printf("%d %d\nEqual\n", integer, _integer);
return 0;
}
if(fl == 1){ //是同数异型体
printf("%d %d\nALIEN\n", integer, _integer);
}else{ //不是同数异型体
printf("%d %d\nDifferent\n", integer, _integer);
}
return 0;
}
解题思路:
判断同数异形体的方法:
step1:记录第一个整数的数字出现的字数
step2:记录第二个整数的数字出现的字数
step3:比较两个整数的数字出现的字数是否一样
归属知识点:
函数
循环结构
选择结构