7-4 同数异形体

7-4 同数异形体

分数 10

全屏浏览

切换布局

作者 庄波

单位 山东航空学院

在自然界中,有些物质由同样的单一化学元素组成,因排列方式不同而具有不同性质,称为同素异形体,比如:钻石和石墨。

a.jpg

类似地,我们把由相同的数字(包括个数)、不同的排列形成的正整数称为同数异形体。

例如:12121 和 11221 均由 3 个 1 和 2 个 2 组成,因此互为“同数异形体”,但 12121 与 1122 则不是。

请编程判断两个数是否是同数异形体。

输入格式:

两个正整数 a 和 b,空格隔开,大小不超过 230。

输出格式:

第一行输出 a 和 b(中间用一个空格隔开)。
第二行输出是否同数异形体的判断结果:
(1)若 a 等于 b,输出 Equal
(2)若 a 和 b 是同数异形体,则输出 ALIEN;
(3)若 a 和 b 既不相等也不是同数异形体,输出 Different

输入样例 1:

12121 11221

输出样例 1:

12121 11221
ALIEN

输入样例 2:

12121 1122

输出样例 2:

12121 1122
Different

输入样例 3:

12121 12121

输出样例 3:

12121 12121
Equal

代码长度限制

16 KB

时间限制

400 ms

内存限制

64 MB

栈限制

8192 KB

答案:

#include<stdio.h>
int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    printf("%d %d\n",a,b);
    if(a==b) printf("Equal\n");
    else{
        int aa[10]={0};
        int bb[10]={0};
        do{
            aa[a%10]++;
            a/=10;
        }while(a!=0);
        do{
            bb[b%10]++;
            b/=10;
        }while(b!=0);
        for(int i=0;i<10;i++){
            if(aa[i]!=bb[i]){
                printf("Different\n");
                return 0;
            }
        }
        printf("ALIEN\n");
    }
    
    return 0;
}

### C语言实现判断数异形体 在C语言中,判断两个整数是否为数异形体的方法主要依赖于统计每个数字中的各个位数出现的次数。如果两个数字中每一位上的数字频率相,则这两个数字互为数异形体。 #### 算法思想 为了验证两数是否构成数异形关系,程序会分别遍历输入的两个整数`num1`和`num2`,并记录下它们各自各位上0到9这十个可能数值各自的数量分布情况。具体来说: - 创建两个长度为10的一维数组`a[]`与`b[]`用于存储对应位置处字符'0'-'9'的数量; - 对每一个待比较的整数执行循环操作直至其值降为零,在每次迭代过程中更新相应索引下的计数值; - 完成上述过程之后再逐一核对这两组数据结构内的元素是否存在差异;一旦发现不匹配之处即刻返回假(false),反之则说明二者确实属于一类形态各异的对象——也就是所谓的“数异形”。 此逻辑可通过如下代码片段来体现[^4]: ```c bool Isomorphism(int num1, int num2) { int a[10] = {0}, b[10] = {0}; // 统计第一个数字各位置上的频次 while (num1) { a[num1 % 10]++; num1 /= 10; } // 统计第二个数字各位置上的频次 while (num2) { b[num2 % 10]++; num2 /= 10; } // 比较两者之间的频次表是否有任何不 for (int i = 0; i < 10; i++) { if (a[i] != b[i]) return false; } return true; } ``` 该函数接收两个参数作为要对比的目标对象,并通过一系列运算最终得出结论性的布尔值结果。当调用方传入一对满足条件的数据时,它将会输出肯定的回答;否则便给出否定的结果。 #### 主程序部分 下面是一个完整的例子展示如何利用上面定义好的辅助功能来进行实际测试: ```c #include <stdio.h> // ... 上述Isomorphism函数声明 ... int main() { int num1, num2; printf("请输入两个整数:\n"); scanf("%d %d", &num1, &num2); if (Isomorphism(num1, num2)) printf("%d 和 %d 是数异形体\n", num1, num2); else printf("%d 和 %d 不是数异形体\n", num1, num2); return 0; } ``` 这段简单的交互式应用程序允许用户输入任意两个非负整数,随后借助之前介绍过的检测机制确定这对组合能否被认定为构实例之一,并据此反馈给使用者相应的提示信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值