问网易笔试的一道题
见过难的,没见过这么难的,网易真变态。
其中有一道题我要问问大家,给个思路,最好能有代码。
题意很简单,写一个程序,打印出以下的序列。
(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;
}
加括号什么的没做
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;
}