HDU 4394 Digital Square [搜索]

本文提供了一个算法来寻找最小的尾数为特定数字X的平方数,通过从后向前搜索来实现这一目标。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  求最小的尾数为X的平方数。  

  符合情况的数不会有太多,从后向前搜就可以了。

  

 1 #include <string.h>
 2 #include <stdio.h>
 3 #include <algorithm>
 4 #define INF 0x3fffffff
 5 typedef long long LL;
 6 int cas,n,num[15],len,ans;
 7 LL sqr(int x){
 8     return (LL)x*x;
 9 }
10 void dfs(int l,int mul,int pre){
11     if(l==len){
12         ans=std::min(pre,ans);
13         return;
14     }
15     for(int i=0;i<10;i++){
16         if(sqr(i*mul+pre)/mul%10==num[l]){
17             dfs(l+1,mul*10,i*mul+pre);
18         }
19     }
20 }
21 int main(){
22     //freopen("test.in","r",stdin);
23     for(scanf("%d",&cas);cas--;){
24         scanf("%d",&n);
25         len=0;
26         while(n)num[len++]=n%10,n/=10;
27         ans=INF;
28         dfs(0,1,0);
29         if(ans!=INF)printf("%d\n",ans);
30         else printf("None\n");
31     }
32     return 0;
33 }

转载于:https://www.cnblogs.com/swm8023/archive/2012/09/23/2698814.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值