Google面试题 (转载)
#11
答案...
[图片: 48.gif]
回复
#12
比较笨的办法,不推荐使用,用此方法去参加考试,保证不会被录取,嘎嘎。
代码:
/*******************************/
/*   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 ]
请小心你的思想,它会影响你的行为,

请小心你的行为,它会影响你的习惯,

请小心你的习惯,它会影响你的性格,

请小心你的性格,它会影响你的命运。
回复
#13
第三题
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;
}
请小心你的思想,它会影响你的行为,

请小心你的行为,它会影响你的习惯,

请小心你的习惯,它会影响你的性格,

请小心你的性格,它会影响你的命运。
回复
#14
对第一题代码作了一定优化,速度大大提高,但总感觉还会有更好的方法。
代码:
/*******************************/
/*   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 ]
请小心你的思想,它会影响你的行为,

请小心你的行为,它会影响你的习惯,

请小心你的习惯,它会影响你的性格,

请小心你的性格,它会影响你的命运。
回复
#15
有这样一个函数,对于任意整数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();
}
请小心你的思想,它会影响你的行为,

请小心你的行为,它会影响你的习惯,

请小心你的习惯,它会影响你的性格,

请小心你的性格,它会影响你的命运。
回复
#16
再次优化第一题,用递归算法求解。

代码:
/*******************************/
/*   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 ]
请小心你的思想,它会影响你的行为,

请小心你的行为,它会影响你的习惯,

请小心你的习惯,它会影响你的性格,

请小心你的性格,它会影响你的命运。
回复
#17
这么长的程序
太有耐心了
回复
#18
强了么!
就是看不懂。
回复
#19
大花狗同志的算法让我想起用美国太空总署卫星追踪一只鸟
<font size="5">Where have all the flowers gone?</font>
回复
#20
这个叫做学以致用~
回复


跳转到:


正在阅读该主题的用户: 1位游客
您的访问已通过Cloudflare保护,访问自美国/loc=US。