| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1348 人关注过本帖
标题:两道小题
只看楼主 加入收藏
abc888
Rank: 1
等 级:新手上路
威 望:1
帖 子:90
专家分:0
注 册:2007-4-24
收藏
 问题点数:0 回复次数:29 
两道小题

1.输入n个数 输出每个数的阶乘的末尾连续0的个数?
如:
输入:3 6 27 200
输出:0 1 6 49
2.输入n个字符串,输出这些字符串的最长匹配子串;
如:
输入:abcdefgfgf
a39dacn,cdefgeIo?
a3 dcnn,wwcdefg.
输出:cdefg

[此贴子已经被作者于2007-5-10 18:28:15编辑过]

搜索更多相关主题的帖子: 字符串 
2007-04-24 22:53
fish_
Rank: 1
等 级:新手上路
帖 子:46
专家分:0
注 册:2007-4-25
收藏
得分:0 
漂亮!
第一个算法:
#include<stdio.h>
#include<iostream.h>
int main(void)
{
int a=0;
int b=0;
cout<<"put anumber:\n"<<endl;
cin>>a;
for(int i=5;i<=a;i+=5)
{
b=b+1;
}
cout<<b<<endl;
return 0;
}
我觉得这个考察的是5的倍数的个数,一个就一个0,、
这个程序只是测试,
过几天把程序改进一下!·
第二个我还没想好!

[此贴子已经被作者于2007-4-25 21:13:22编辑过]

2007-04-25 21:08
smartwind
Rank: 1
等 级:新手上路
威 望:1
帖 子:277
专家分:0
注 册:2006-11-13
收藏
得分:0 

第一个:
#include <iostream>
using namespace std;

#define N 20
#define M 1000

int num[N],j=0;

int f(int n,int a=0)
{
if(n%5==0)
f(n/5,a+1);
else
return a;
}

bool get()
{
char a[M];
cin.getline(a,M);
int i=0;
while(a[i]!='\0')
{
if(a[i]!=' ')
{
if(a[i]<'0'||a[i]>'9')
{
cout<<"wrong"<<endl;
return false;
}
else
num[j]=num[j]*10+(a[i]-'0');
}
else
j++;
i++;
}
j++;
return true;
}

int main()
{
int t=0,i;
if(get())
{
for(int n=0;n<j;n++)
{
t=0;
for(i=5;i<=num[n];i+=5)
t+=f(i);
cout<<t<<' ';
}
cout<<endl;
}
system("pause");
}


2007-04-26 14:22
TenY
Rank: 1
来 自:重庆大学
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-3-18
收藏
得分:0 
LZ是不是写错了?
200的时候应该是49才对吧?
2007-04-27 11:15
abc888
Rank: 1
等 级:新手上路
威 望:1
帖 子:90
专家分:0
注 册:2007-4-24
收藏
得分:0 
TenY说说你的算法,为什么200应该是49

编海无涯,回头死岸
2007-04-27 21:38
TenY
Rank: 1
来 自:重庆大学
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-3-18
收藏
得分:0 

#include <iostream>
#include <cmath>
using namespace std ;

// To get the size of the largest number.
int InspectSize( int &Nbr ){
int size = 0 ;
int CompareNbr = 1 ;
while ( Nbr/CompareNbr != 0 ){
++size ;
CompareNbr = CompareNbr * 10 ;
}
return size ;
}

int main(){
int Nbr ;
cout << "Please type in " << endl ;
cin >> Nbr ;
// Get the numbersize
int size = InspectSize( Nbr ) ;

// To know how many fives.
int fives = 5 ;
// To be clear about when to stop
int MaxNbr = pow ( 10, size ) ;
// Record the number of zeros.
int Num = 0 ;

while( fives < MaxNbr ){
Num = Num + Nbr / fives ;
fives = 5 * fives ;
}
cout << "There's " << Num << " zeros" << endl ;
return 0;
}

有多少个5就有多少个0,
同时注意它们是阶乘..

[此贴子已经被作者于2007-4-27 22:46:10编辑过]

2007-04-27 22:41
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 

晕,有个溢出问题!

[此贴子已经被作者于2007-4-27 23:39:28编辑过]


Fight  to win  or  die...
2007-04-27 23:29
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
收藏
得分:0 
[CODE]int count0(int ival){
int count = 0;
for (;ival >= 5;--ival){
for (int temp = ival;(temp % 5) == 0;temp /= 5)
++count;
}
return count;
}[/CODE]

第一个!

200的时候是49!

Fight  to win  or  die...
2007-04-28 09:57
fantsical
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-1-23
收藏
得分:0 
2007-04-28 10:06
yucarl
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2007-4-28
收藏
得分:0 
fish的算法我觉得有bug

比如25的时候就应该算2个0了。。。
2007-04-28 12:31
快速回复:两道小题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020428 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved