首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

问网易笔试的一路题

2013-11-30 
问网易笔试的一道题见过难的,没见过这么难的,网易真变态。其中有一道题我要问问大家,给个思路,最好能有代码

问网易笔试的一道题
见过难的,没见过这么难的,网易真变态。
其中有一道题我要问问大家,给个思路,最好能有代码。
题意很简单,写一个程序,打印出以下的序列。
(a),(b),(c),(d),(e)........(z)
(a,b),(a,c),(a,d),(a,e)......(a,z),(b,c),(b,d).....(b,z),(c,d).....(y,z)
(a,b,c),(a,b,d)....(a,b,z),(a,c,d)....(x,y,z)
....
(a,b,c,d,.....x,y,z)
规律很简单,但要我打印出来,尼玛想破脑袋也没想出好方法,让我用26层循环吗?
[解决办法]


#include<iostream>

using namespace std;

void func(void)
{
    char *table = new char['z' - 'a' + 1];
    int num;
    
    for (num = 1; num <= 'z' - 'a' + 1; ++num)
    {
        int cur = 0;
        table[0] = 'a' - 1;

        while (cur >= 0)
        {
            table[cur] += 1;
            
            if (table[cur] <= 'z')
            {
                if (num - 1 == cur)
                {
                    int i;
                    for (i = 0; i < num; ++i)
                    {
                        cout<<table[i];
                    }
                    cout<<", ";
                }
                else
                {
                    ++cur;
                    table[cur] = table[cur - 1];
                }
            }
            else
            {
                cur -= 1;
            }
        }
        cout<<endl;
    }
    
    delete[]table;
}

int main()
{
    func();
    
    system("pause");
    return 0;
}

[解决办法]

#include <stdio.h>
#include <stdlib.h>

void print(char *str, int i);
char arry[] = {'a','b', 'c','d', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm' , 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x' , 'y', 'z'};
void fun(char *str)
{
for(int i=0; i<26; ++i)
print(str+i, i);
}

void print(char *str, int i)
{
if(str+i == arry+26)
printf("%s\n", str+i);
else if(str+i < arry+26)
{
for(int k=0; k<arry+26-str+1; ++k)


{for(int j=0; j<k; j++)
printf("%c", *(str+j));

printf("\n");
}
}
else
{
fun(str);
}
}

int main()
{
  fun(arry);

  return 0;
}

加括号什么的没做


[解决办法]
中间一行是测试楼上代码的。。。。
忘记删了,请无视。。。。。这行#include<iostream> 
算了我重新贴一下


char g_str[26];
 void  SelNum(int start,int end,int index,int cnt)
 {
 if(index ==(cnt-1))
 {
 g_str[index] = start;
 printf("(%c",g_str[0]);
 for(int i=1;i<cnt;i++)
 printf(",%c",g_str[i]);
 printf("),");
 }
 else
 { 
 for(int i = start;i<=(end-(cnt-index-1));i++)
 {
  g_str[index] = i;
 SelNum(i+1,end,index+1,cnt);
 }
 }
 }
int main()
{
for(int i = 1;i<=26;i++)
{
for(char c='a';c<='z';c++)
{
SelNum(c,'z',0,i);
}
printf("\b \n");
}
return 0;
}


[解决办法]

#include <iostream>
using namespace std;

void func(void)
{
    char *table = new char['z' - 'a' + 1];
    int num;
    for (int i=0;i!='z'-'a'+1;++i)
       table[i]='a'+i;
       
    for (num = 0; num < 26; ++num)
    {
        char cur=table[num];
        int step = cur -table[0];
        for (int j=step;j!= 26;++j)
        {
            cout<<"(";
            for (int k= 0;k!=step;++k)
            { 
                cout<<table[k]<<",";
                }
                cout<<table[j]<<")"   ;  
        }
        cout<<endl;
    }
    
    delete[]table;
}

int main()
{
    func();
    system("pause");
    return 0;
}                

在we_sky2008基础上改的

热点排行