Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
Re:这题给点解题思路吧.......搜索?In Reply To:这题给点解题思路吧.......搜索? Posted by:hdm2968 at 2006-02-10 18:44:51 > 好像没多少人说说这题怎样做 我的思路:(大牛见笑)利用一个数和这个数各个数字之和除9同余,假设t是"自私数",设它可以被n分解,n的各位和是s,那么就有t%9=(n%9+s%9)%9,如果t%9为奇数,那么(t%9+9)/2就等于s%9和n%9,否则t%9等于s%9和n%9,这样就求出了n%9,然后对n%9~t的每一个n测试,如果能分解就不是"自私数"否则就是"自私数", #include<iostream> #include<stdio.h> using namespace std; int o(int t) { int mod,wei,i,j,sum,num; if(t<10)wei=1; else if(t<100)wei=2; else if(t<1000)wei=3;else wei=4; for(i=0;i<2;i++) { sum=9*i+t%9; if(sum%2==0) { mod=sum/2; num=(t-wei*9)/9*9+mod; for(j=0;num<t;j++) { num=mod+j*9; int s=num,k=0; while(s!=0) { k+=s%10; s/=10; } if(t==k+num) return 0; } } } return 1; } int main() { int t=1; while(t!=9999) { if(o(t++)==1) printf("%d\n",t-1); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator