面试题

hualin007 2005-10-09 03:02:54
输入:11111输出:5,1,
输入:22222输出:5,2,
输入:12345输出:-5,1,2,3,4,5,
输入:11223输出:2,1,2,2,1,3,
输入:12222输出:1,1,4,2,
输入:12344输出:-3,1,2,3,2,4,
...全文
254 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
wolf_baby 2005-10-11
  • 打赏
  • 举报
回复
#include <stdio.h>
void main()
{
int x,x1,i,n=0;
int a[10]={0,0,0,0,0,0,0,0,0,0};
scanf("%d",&x);
x1=x;
while(x!=0)
{
a[x%10]++;
x/=10;
}
printf("input:%doutput:",x1);
for(i=0;i<10;i++)
if(a[i]==1) n++;
if(n>1) printf("%d,",-n);
for(i=0;i<10;i++)
{ if(a[i]!=0)
if((a[i]==1)&&(n>1))
printf("%d,",i);
else
printf("%d,%d,",a[i],i);
}
}

vc下编译通过,是samfeng_2003(风云)的方法,其实实现是简单的,关键好的是的上面所说的算法。
boylez 2005-10-11
  • 打赏
  • 举报
回复
输入:12222输出:1,1,4,2,
这个是不是也能输出为:-1,1,4,2,
samfeng_2003 2005-10-11
  • 打赏
  • 举报
回复
vc下怎么来编辑一个单独的文件喃?我从来没有整过!感觉turboc2.0太费劲了!:(
hualin007 2005-10-10
  • 打赏
  • 举报
回复
图片在哪呢?
hualin007 2005-10-10
  • 打赏
  • 举报
回复
能不能用c语言写出来呢?
samfeng_2003 2005-10-10
  • 打赏
  • 举报
回复
http://www.sestl.com/images/111.jpg
http://www.sestl.com/images/222.jpg
http://www.sestl.com/images/333.jpg
可以啊,这是我的结果截图得嘛!可以运行啊!
hualin007 2005-10-10
  • 打赏
  • 举报
回复
我运行了怎么通不过?
hualin007 2005-10-10
  • 打赏
  • 举报
回复
程序错误太多,估计修改一下就是一个好程序,你在机器上实现了吗?是哪种编译环境?
samfeng_2003 2005-10-10
  • 打赏
  • 举报
回复
呵呵!运行一下就知道了!这个我在turboc2里已经通过了!思路是,用数组和标志技术,数组里面1,2,3,4,5,6,7,8,9,分别对应1-9,因为以为你要的是5位整数,所以采用整数位分解的方法,然后和数组,对应,如果是1,那么A[1]就加1,然后最后来循环读一读数组,如果N为1,那么表示输入的数字里面只有一个数字,那么直接输出就可以了,否则就进行判断。如果输入的是字符串,那么就是进行字符串分解,然后对应数组存取就可以了。原理是一样的!大家可以通过turboc2调试一下!:)
hualin007 2005-10-10
  • 打赏
  • 举报
回复
规律很简单啊,就是输出如果第一个数是正数,则输入串里有这么多相同的字符,如果是负数,表示后面的有几个数不重复
wolf_baby 2005-10-10
  • 打赏
  • 举报
回复
samfeng_2003(风云)的方法不错,不过程序中还有错误吧。
for(i=0;i<10;i++)
if(a[i]!=0) n++;
if(n>1) printf("%d,",-n);
中间一行,应改为
if(a[i] == 1) n++;

要不然,“输入:12344输出:-3,1,2,3,2,4,”是实现不了的吧?
aSalt 2005-10-10
  • 打赏
  • 举报
回复
感觉就是麻烦,说个规律好不好,忙~
kingsonblog 2005-10-10
  • 打赏
  • 举报
回复
bool first=true;//第一个不同的数字不能不能表示为-1 x,应该是1 x
void print(const char *temp,int len){
if(first&&len==1)
cout<<len<<" ";
else
cout<<-1 * len<<" ";
for(int index=0;index<len;index++)
cout<<temp[index]<<" ";
first=false;
}
void prints(int len,char last){
first=false;
cout<<len<<" "<<last<<" ";
}
void compute(string buf){
int size=buf.size();
if(size==0)
return;
if(size==1){
print(buf.c_str(),1);
return;
}
char *temp=new char[size];
int len=0;
for(int index=1;index<size;index++){
if(buf[index]!=buf[index-1]){
if(len>0){//前面有相同的数据
prints(len,buf[index-1]);//打印相同数字,开始不同的数字
len=0;
}
else{//前面没有相同数字,可以开始存储上一个不同的数字
temp[-1*len]=buf[index-1];
len--;
}
if(index==size-1){
temp[-1*len]=buf[index];
len--;
print(temp,-1*len);
}
}
else{
if(len<0){//前面已经有不同的数字存储,打印
print(temp,-1*len);
len=2;
}
else if(len==0)//前面没有不同的数字
len=2;
else
len++;
if(index==size-1){
prints(len,buf[index-1]);
}
}
}
cout<<"\n";
}
kingsonblog 2005-10-10
  • 打赏
  • 举报
回复
void print(char *temp,int len){
if(len==1)
cout<<len<<" ";
else
cout<<-1 * len<<" ";
for(int index=0;index<len;index++)
cout<<temp[index]<<" ";
}
void compute(string buf){
int size=buf.size();
if(size==0)
return;
if(size==1){
print(buf,1);
return;
}
char *temp=new char[size];
int len=0;
char last=buf[0];
for(int index=1;index<size;index++){
if(buf[index]!=last){
if(len>0){
cout<<len<<" "<<last<<" ";
len=0;
}
else{
temp[-1*len]=last;
len--;
}
if(index==size-1){
temp[-1*len]=buf[index];
len--;
print(temp,-1*len);
}
}
else{
if(len<0){
print(temp,-1*len);
len=2;
}
else if(len==0)
len=2;
else
len++;
if(index==size-1){
cout<<len<<" "<<last<<" ";
}
}
last=buf[index];
}
cout<<"\n";
}
hualin007 2005-10-09
  • 打赏
  • 举报
回复
这个题不管谁第一次看到,都说简单,可是很少有人能够写的出来。
hualin007 2005-10-09
  • 打赏
  • 举报
回复
能把程序解释一下吗?感觉不是很对!
samfeng_2003 2005-10-09
  • 打赏
  • 举报
回复
修改了一下!
main()
{
int x,x1,i,n=0;
int a[10]={0,0,0,0,0,0,0,0,0,0};
scanf("%d",&x);
x1=x;
while(x!=0)
{
a[x%10]++;
x/=10;
}
printf("input:%doutput:",x1);
for(i=0;i<10;i++)
if(a[i]!=0) n++;
if(n>1) printf("%d,",-n);
for(i=0;i<10;i++)
{ if(a[i]!=0)
if(a[i]==1)
printf("%d,",i);
else
printf("%d,%d,",a[i],i);
}
}
samfeng_2003 2005-10-09
  • 打赏
  • 举报
回复
main()
{
int x,i,n=0;
int a[10]={0,0,0,0,0,0,0,0,0,0};
scanf("%d",&x);
while(x!=0)
{
a[x%10]++;
x/=10;
}
for(i=0;i<10;i++)
if(a[i]!=0) n++;
if(n>1) printf("%d,",-n);
for(i=0;i<10;i++)
{ if(a[i]!=0)
if(a[i]==1)
printf("%d,",i);
else
printf("%d,%d,",a[i],i);
}
}

33,028

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧