帖子: 3322 
	主题: 243 
	注册: 2004-4
	
	 
 
 
	
	
	
		
	帖子: 426 
	主题: 26 
	注册: 2005-2
	
	 
 
	
	
		比较笨的办法,不推荐使用,用此方法去参加考试,保证不会被录取,嘎嘎。 代码: /*******************************/ 
/*   Q:WWWDOT-GOOGLE=DOTCOM    */ 
/*   A:777589-188103=589486    */ 
/*     777589-188106=589483    */ 
/*******************************/ 
 
#include "stdio.h" 
 
void main()  
{  
int w,d,o,t,c,m,g,l,e;  
 
for (w = 1;w<=9;w++)  
for (d = 1;d<=9;d++)  
for (o = 0;o<=9;o++) 
for (t = 0;t<=9;t++) 
for (c = 0;c<=9;c++) 
for (m = 0;m<=9;m++) 
for (g = 1;g<=9;g++) 
for (l = 0;l<=9;l++) 
for (e = 0;e<=9;e++){ 
    if (w!=d && w!=o && w!=t && w!=c && w!=m && w!=g && w!=l && w!=e) 
    if (d!=o && d!=t && d!=c && d!=m && d!=g && d!=l && d!=e) 
    if (o!=t && o!=c && o!=m && o!=g && o!=l && o!=e) 
    if (t!=c && t!=m && t!=g && t!=l && t!=e) 
    if (c!=m && c!=g && c!=l && c!=e) 
    if (m!=g && m!=l && m!=e) 
    if (g!=l && g!=e && l!=e){ 
        int google=g*100000+o*10000+o*1000+g*100+l*10+e;  
        int dotcom=d*100000+o*10000+t*1000+c*100+o*10+m;  
        int wwwdot=w*100000+w*10000+w*1000+d*100+o*10+t;  
        if(wwwdot==(google+dotcom)){ 
            printf ("%d%d%d%d%d%d-",w,w,w,d,o,t); 
            printf ("%d%d%d%d%d%d=",g,o,o,g,l,e); 
            printf ("%d%d%d%d%d%d\n",d,o,t,c,o,m); 
        } 
    } 
} 
 
}
 [  Last edited by 大花狗上树 on 2005-11-21 at 00:59 ]
	  
	
	
请小心你的思想,它会影响你的行为, 
 
请小心你的行为,它会影响你的习惯, 
 
请小心你的习惯,它会影响你的性格, 
 
请小心你的性格,它会影响你的命运。
 
	
	
 
 
	
	
	
		
	帖子: 426 
	主题: 26 
	注册: 2005-2
	
	 
 
	
	
		第三题 
1  
1个1,11  
2个1,21  
1个2,1个1,1211  
1个1,1个2,2个1,111221
 
下一行应该是 
3个1,2个2,1个1   312211
 代码: #include <iostream> 
#include <string> 
#include <sstream> 
 
using namespace std; 
 
main() 
{ 
    string s = "1"; 
    cout << s << endl; 
    for( int N=0; N<10; ++N )  
    { 
        ostringstream os; 
        for( size_t i=0; i<s.length(); ++i ) 
        { 
            size_t n = 1; 
            char c = s[i]; 
            for( ; i<s.length() && s[i+1]==c; ++i ) ++n; 
            os << n << c; 
        } 
        s = os.str(); 
        cout << s << endl; 
    } 
 
    return 0; 
}
  
	 
	
	
请小心你的思想,它会影响你的行为, 
 
请小心你的行为,它会影响你的习惯, 
 
请小心你的习惯,它会影响你的性格, 
 
请小心你的性格,它会影响你的命运。
 
	
	
 
 
	
	
	
		
	帖子: 426 
	主题: 26 
	注册: 2005-2
	
	 
 
	
	
		对第一题代码作了一定优化,速度大大提高,但总感觉还会有更好的方法。 
代码: /*******************************/  
/*   Q:WWWDOT-GOOGLE=DOTCOM    */  
/*   A:777589-188103=589486    */  
/*     777589-188106=589483    */  
/*******************************/  
#include "stdio.h"  
#include "conio.h"  
 
void main()  
{  
int w,d,o,t,c,m,g,l,e;  
 
for (w = 1;w<=9;w++)  
for (d = 1;d<=9;d++){  
    if (w==d) continue;  
    for (o = 0;o<=9;o++) {  
        if (o==d||o==w) continue;  
        for (t = 0;t<=9;t++) {  
            if (t==d||t==w||t==o) continue;  
            for (c = 0;c<=9;c++) {  
                if (c==d||c==w||c==o||c==t) continue;  
                for (m = 0;m<=9;m++) {  
                    if (m==d||m==w||m==o||m==t||m==c) continue;  
                    for (g = 1;g<=9;g++) {  
                        if (g==d||g==w||g==o||g==t||g==c||g==m) continue;  
                        for (l = 0;l<=9;l++) {  
                            if (l==d||l==w||l==o||l==t||l==c||l==m||l==g) continue;  
                            for (e = 0;e<=9;e++){  
                                if (e==d||e==w||e==o||e==t||e==c||e==m||e==g||e==l) continue;  
                                int google=g*100000+o*10000+o*1000+g*100+l*10+e;  
                                int dotcom=d*100000+o*10000+t*1000+c*100+o*10+m;  
                                int wwwdot=w*100000+w*10000+w*1000+d*100+o*10+t;  
                                if(wwwdot==(google+dotcom)){  
                                    printf ("%d%d%d%d%d%d-",w,w,w,d,o,t);  
                                    printf ("%d%d%d%d%d%d=",g,o,o,g,l,e);  
                                    printf ("%d%d%d%d%d%d\n",d,o,t,c,o,m);  
                                }  
                            }  
                        }  
                    }  
                }  
            }  
        }  
    }  
}  
getchar();  
}
 [  Last edited by 大花狗上树 on 2005-11-21 at 13:32 ]
	  
	
	
请小心你的思想,它会影响你的行为, 
 
请小心你的行为,它会影响你的习惯, 
 
请小心你的习惯,它会影响你的性格, 
 
请小心你的性格,它会影响你的命运。
 
	
	
 
 
	
	
	
		
	帖子: 426 
	主题: 26 
	注册: 2005-2
	
	 
 
	
	
		有这样一个函数,对于任意整数n,都能返回写出0到n之间出现“1”的个数。例如,f(13)=6。请注意f(1)=1,那么下一个能实现f(n)=n的最大数字是什么?  
代码: /*****************************************/ 
/*        Result:                        */ 
/*        f(199981)=199981               */ 
/*****************************************/ 
 
#include <stdio.h> 
#include <conio.h> 
 
void main()  
{ 
int n = 2; 
int num = 1; 
int num_tmp,one; 
bool founded = false; 
    while(!founded){ 
        one=0; 
        num_tmp=n; 
        while(num_tmp > 0){ 
            if(num_tmp % 10 == 1) 
                one++; 
            num_tmp = num_tmp / 10; 
        } 
        num = num + one; 
        if(num == n) 
            break; 
        else 
            n++; 
    } 
printf("f(%d)=%d",n,n); 
getchar(); 
}
  
	 
	
	
请小心你的思想,它会影响你的行为, 
 
请小心你的行为,它会影响你的习惯, 
 
请小心你的习惯,它会影响你的性格, 
 
请小心你的性格,它会影响你的命运。
 
	
	
 
 
	
	
	
		
	帖子: 426 
	主题: 26 
	注册: 2005-2
	
	 
 
	
	
		再次优化第一题,用递归算法求解。 
代码: /*******************************/ 
/*   Q:WWWDOT-GOOGLE=DOTCOM    */ 
/*   A:777589-188103=589486    */ 
/*     777589-188106=589483    */ 
/*******************************/ 
#include <stdio.h> 
 
void getans(int num[], int n_tmp)    //通过递归调用对num_0_9数组进行组合排序 
{ 
  int tmp; 
  int w,d,o,t,g,l,e,c,m,wwwdot,google,dotcom; 
  if(n_tmp == 1){ 
    w = num[0]; 
    d = num[1]; 
    o = num[2]; 
    t = num[3]; 
    g = num[4]; 
    l = num[5]; 
    e = num[6]; 
    c = num[7]; 
    m = num[8]; 
    wwwdot = w*111000 + d*100 + o*10 + t; 
    google = g*100100 + o*11000 + l*10 + e; 
    dotcom = d*100000 + o*10010 + t*1000 + c*100 + m; 
 
    //其中的M和E的值可以互换,但不允许第一位是0。 
    if(w!=0 && g!=0 && d!=0)     
        if((wwwdot-google==dotcom) || (wwwdot-(google-e+m) == (dotcom-m+e))) 
            printf("%d - %d = %d\n",wwwdot,google,dotcom); 
  } 
  else{ 
    for(int i = 0; i < n_tmp; i++){ 
      tmp=num[i]; num[i]=num[n_tmp-1]; num[n_tmp-1]=tmp; 
      getans(num, n_tmp-1); 
      tmp=num[i]; num[i]=num[n_tmp-1]; num[n_tmp-1]=tmp; 
 
    } 
  } 
} 
 
void main() 
{ 
  int n = 10; 
  int num_0_9[]={0,1,2,3,4,5,6,7,8,9}; 
 
  getans(num_0_9, n); 
 
}
 [  Last edited by 大花狗上树 on 2005-11-22 at 00:16 ]
	  
	
	
请小心你的思想,它会影响你的行为, 
 
请小心你的行为,它会影响你的习惯, 
 
请小心你的习惯,它会影响你的性格, 
 
请小心你的性格,它会影响你的命运。
 
	
	
 
 
	
	
	
		
	帖子: 4845 
	主题: 193 
	注册: 2004-5
	
	 
 
 
	
	
	
		
	帖子: 1491 
	主题: 71 
	注册: 2005-10
	
	 
 
 
	
	
	
		
	帖子: 3057 
	主题: 77 
	注册: 2005-6
	
	 
 
	
	
		大花狗同志的算法让我想起用美国太空总署卫星追踪一只鸟
	 
	
	
<font size="5">Where have all the flowers gone?</font>
 
	
	
 
 
	
	
	
		
	帖子: 8881 
	主题: 208 
	注册: 2004-8
	
	 
 
 
	 
 |