通宵做几道题,求热情的大牛和童子们一起帮忙看看,说说好的思路和答案,最好有点分析过程,多谢了,先拜个年,多谢
通宵做几道题,求热情的大牛和童子们一起帮忙看看,说说好的思路和答案,最好有点分析过程,谢谢了,先拜个年,谢谢
1.统计1 个word(32bit)里面的1的bit数;
int count_1(int word)
{
int num = 0;
while (word > 0) {
num++;
word = word & (word – 1);
}
return num;
}
int main()
{
int word = 1200;
int num = count_1(word);
return 0;
}
2. strcpy的实现
char *strcpy(char *dest, const char *src)
{
if (dest == NULL || src == NULL)
return NULL;
if (dest == src)
return dest;
char *destCpy = dest;
while((*dest++ = *src++) != ‘\0′)
;
return destCpy;
}
3.找出因子只有2,3,5的第1500个数,如1,2,3,4,5,6,8,9,10为满足条件的数,设计有效算法
满足这个条件的数据都应该满足v = 2^x * 3^y * 5^z, 从http://blog.****.net/wwd252/archive/2008/09/04/2882645.aspx看到了算法,借鉴一下
#include <stdio.h>
#include <iostream>
using std::cout;
#define N 1500
int main()
{
long result[N];
int p2, p3, p5;
int i;
result[0] = 1;
p2 = p3 = p5 = 0;
for(i = 1; i < N; ++i){
int min;
min = result[p2] * 2;
if(min > result[p3] * 3)
min = result[p3] * 3;
if(min > result[p5] * 5)
min = result[p5] * 5;
result = min;
if(result[p2] * 2 <= result)
p2++;
if(result[p3] * 3 <= result)
p3++;
if(result[p5] * 5 <= result)
p5++;
}
cout<<result[N- 1];
}
这道题我觉着关键就是设立一个机制,判断哪个指数加1。
------解决方案--------------------
第三题有意思,我没想出怎么弄。
另外楼主最好去看看版主发的那个《提问的智慧》的帖子,里面有怎么贴代码的方法,你代码这样直接拷贝上去很难看。
1.统计1 个word(32bit)里面的1的bit数;
int count_1(int word)
{
int num = 0;
while (word > 0) {
num++;
word = word & (word – 1);
}
return num;
}
int main()
{
int word = 1200;
int num = count_1(word);
return 0;
}
2. strcpy的实现
char *strcpy(char *dest, const char *src)
{
if (dest == NULL || src == NULL)
return NULL;
if (dest == src)
return dest;
char *destCpy = dest;
while((*dest++ = *src++) != ‘\0′)
;
return destCpy;
}
3.找出因子只有2,3,5的第1500个数,如1,2,3,4,5,6,8,9,10为满足条件的数,设计有效算法
满足这个条件的数据都应该满足v = 2^x * 3^y * 5^z, 从http://blog.****.net/wwd252/archive/2008/09/04/2882645.aspx看到了算法,借鉴一下
#include <stdio.h>
#include <iostream>
using std::cout;
#define N 1500
int main()
{
long result[N];
int p2, p3, p5;
int i;
result[0] = 1;
p2 = p3 = p5 = 0;
for(i = 1; i < N; ++i){
int min;
min = result[p2] * 2;
if(min > result[p3] * 3)
min = result[p3] * 3;
if(min > result[p5] * 5)
min = result[p5] * 5;
result = min;
if(result[p2] * 2 <= result)
p2++;
if(result[p3] * 3 <= result)
p3++;
if(result[p5] * 5 <= result)
p5++;
}
cout<<result[N- 1];
}
这道题我觉着关键就是设立一个机制,判断哪个指数加1。
------解决方案--------------------
第三题有意思,我没想出怎么弄。
另外楼主最好去看看版主发的那个《提问的智慧》的帖子,里面有怎么贴代码的方法,你代码这样直接拷贝上去很难看。