笨逼阿杰写同构数程序

Problem F: 判断同构数(I)
这道题是第二次刷了,但是还是做得稀巴烂,可以说上次实验做到这个题没做出来自己就放弃了个屁,这非常不好,今天这道题再次出现在OJ给我自己提了个醒。不过经过我一番努力(瞎几把写),还是成功地一次AC了🤭
上题目:

Problem F: 判断同构数(I)

Description
正整数n若是它平方数的尾部,则称n为同构数。例如:5的平方数是25,且5出现在25的右侧,那么5就是一个同构数。
Input
一个不超过4位的正整数N。
Output
如果N是一个同构数,则输出:YES。否则输出NO。
Sample Input
5
Sample Output
YES

上次实验反正没做出来,这次拿到直接从头开始想,在本子上写了几个,好像没啥规律可循,25-5=20,36-6=30,625-25=600写了这几个也没研究出啥。所以我决定那就一位一位地比较吧,反正不超过四位数。。。然后自然就是不断地对十取余,整除十……
最终的AC码:

#include <stdio.h>
#include <stdlib.h>
int main()
{
//    freopen("in.txt","r",stdin);
//    freopen("out.txt","w",stdout);
    int a,b;
    scanf("%d",&a);
    b = a*a;
    if(a<10&&a==b%10||a<100&&a>=10&&a%10==b%10&&a/10%10==b/10%10||a>=100&&a<1000&&a%10==b%10&&b/10%10==a/10%10&&a/100%10==b/100%10||a>=1000&&a<10000&&a%10==b%10&&a/10%10==b/10%10&&a/100%10==b/100%10&&a/1000%10==b/1000%10)
        printf("YES");
    else
        printf("NO");
    return 0;
}

大概就是这么个蠢逼笨蛋解法。。。。好歹AC了。
然后百度一下,找到了度娘解法:
找出1至10000之间的全部同构数的C语言程序
例如:5是25右边的数,25是625右边的数,5和25都是同构数数
方法一:

#include<stdio.h>
int main()
{ long i,j,k;
k=10;
for (i=1;i<=10000;i++){
if (i==k) k*=10;
j=i*i;
if(j%k==i) printf("%ld\t%ld\n",i,j);
}
}

方法二:

#include "stdio.h"
void main( )
{ long int m,m1,n,a,b;
scanf("%ld",&m);
m1=m;
n=m*m1;
while(m1)
{ a=m1%10; b=n%10;
if(a!=b) break;
m1=m1/10; n=n/10;
}
if(m1!=0) printf("%d不是一个同构数");
else printf("%d是一个同构数");

}
方法三:

#include "stdio.h"
int main()
{
long a,b;
for(a=1,b=0;a<10000;a++)
{
b=a*a;
if(b%10==a||b%100==a||b%1000==a||b%10000==a)
printf("%d ",a);
}
}

方法四:

#include <stdio.h>
void main()
{int x,sum=0;
 long int q,w,e,r,t;
    for(x=1;x<=10000;x++)
    {q=(x*x)%10;  //判断平方后个位数 
    w=(x*x)%100;  //判断平方后十位数 
    e=(x*x)%1000;  //判断平方后百位数 
    r=(x*x)%10000;  //判断平方后千位数 
    t=(x*x)%100000;  //判断一万 
        if(q%10==x || w%100==x || e%1000==x || r%10000==x || t%100000==x)
         {sum=sum+x;
         }
    }
    printf("1到10000同构数之和为:%d",sum);
}

看到方法四跟我的方法好像有异曲同工之妙我就放心了,还行,解题思路还是有点的,但是太费劲,得记住其他的几种方法!
2020.11.26.13:54

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值