(C/C++) 算法,编程题

1. 求一个数的二进制中的1的个数。

int func(int x)
{
    int count = 0; 

    while (x)
    {
        count++;
        x = x& (x - 1);
    }

    return count;
}

2. 已知strcpy的函数原型:char *strcpy(char *strDest, const char *strSrc)其中strDest 是目的字符串,strSrc 是源字符串。不调用C++/C 的字符串库函数,请编写函数 strcpy。

int _tmain(int argc, _TCHAR* argv[])
{
    const char *srcStr = "This is a source string.";

    //char *desStr = (char *)malloc(sizeof(srcStr));    // Or below:
    char *desStr = (char *)malloc(sizeof(char)* strlen(srcStr) + 1); 

    myStrcpy(desStr, srcStr);

    printf("Copy result: %s", desStr);
}

char *myStrcpy(char *strDest, const char *strSrc)
{
    if (strSrc == NULL || strDest == NULL)
    {
        return NULL;
    }

    if (strDest == strSrc)
    {
        return strDest;
    }

    char *strDestStart = strDest; 

    while (*strDest !=‘\0‘)
    {
        *strDest++ = *strSrc++;
    }

    return strDestStart;
}

3. 链表题:

一个链表的结点结构

struct Node
{
  int data ;
  Node *next ;
};
typedef struct Node Node ;

  

(1)已知链表的头结点head,写一个函数把这个链表逆序

思路: 用三个指针p0,p1,p2,从头到尾依次遍历并反转结点

int _tmain(int argc, _TCHAR* argv[])
{
	int linkedListLength = 5;
	Node *myList = new Node();
	Node *p = myList;
	printf("Original linked list is:");
	for (int i = 0; i < linkedListLength; i++)
	{
		Node *node = new Node();
		node->data = i;
		printf(" %d", i);
		p->next = node;
		p = node;
	}

	Node *reversedMyList = ReverseLinkedList(myList); 

	printf("\r\nReversed linked list is:");
	Node *r = reversedMyList;
	while (r->next != NULL)
	{
		printf(" %d", r->data);
		r = r->next;
	}
}

Node *ReverseLinkedList(Node *head)
{
	// NULL
	if (head == NULL)
	{
		return NULL;
	}

	// One node only.
	if (head->next == NULL)
	{
		return head;
	}

	// Two or more than two nodes.
	Node *p0 = head;
	Node *p1 = p0->next;
	Node *p2 = p1->next;   //p2 maybe null; 

	p0->next = NULL;

	while (p2 != NULL)
	{
		p1->next = p0;
		p0 = p1;
		p1 = p2;
		p2 = p2->next;
	}

	p1->next = p0;
	return p1;
}

  

时间: 2025-01-16 18:23:37

(C/C++) 算法,编程题的相关文章

需掌握 - JAVA算法编程题50题及答案

[程序1] 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? //这是一个菲波拉契数列问题public class lianxi01 {public static void main(String[] args) {System.out.println("第1个月的兔子对数: 1");System.out.println("第2个月的兔子对数: 1");int f1

算法编程题积累(4)——腾讯笔试&quot;有趣的数字“问题

本题基本思路:先对原序列进行排序,再根据不同情况采用不同算法. 首先差最大的对数最好求:用最小的数的个数 × 最大的数的个数即可. 接着求差最小的对数: 1.当序列中无重复关键字时:可知最小差必然产生在相邻元素中,遍历一遍用map保存最小差的对数即可. 2.当序列中有重复关键字时:首先确定最小差为0,故而对相同序列的个数依次用排列组合的知识求对数即可. AC代码如下: 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 vector<

简单的算法编程题-任意段落按照单词逆序输出

把这个问题抛给温州皮鞋厂老板,老板直接就说这个题目的本意是让你提出stack的解决方案. ??what?stack?too low! ??因为这么个问题还要实现一个stack有点场面大了,事实上谁不知道你把一个个单词push进去,然后再pop出来不就好了吗?所以说stack方案太通用,不足挂齿.-周末没事干时折腾点此类问题,没有错,错在拉开蚊帐睡觉时吵醒疯子和小小,事情偶尔会变严重. ??另外,使用C语言完成和使用Java完成完全不同,Java调用现成的class会非常简单,复杂度完全隐藏在了内

每天一道算法编程题(1)——网易笔试&quot;工程师工作安排“问题

首先理解题目意思:每个人只能做工作序号表里的一件工作且两个人不能同时做一件工作.AC思路:采用暴力枚举每种可能的分配方案,子问题的解决逐步向上解决了母问题,最终原问题得解. 标程作者:NotDeep(牛客网)链接:https://www.nowcoder.com/discuss/22696?type=6&order=0&pos=5&page=2 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 vector&

算法编程题

1.设有一组关键字序列{5,8,14,20,31,55,78,81,93,97,111},使用二分(折半)法查找关键字93需要进行多少次比较() A. 2 B. 3 C. 4 D. 5 low = 0, high = 10    mid=(low+high)/2=5 93>55 low = 6, high = 10    mid=(low+high)/2=8 93 == 93 2.在股市的交易日中,假设最多可进行两次买卖(即买和卖的次数均小于等于2),规则是必须一笔成交后进行另一笔(即买-卖-买

LeetCode算法编程(两题)

今天看到酷壳推荐的国外编程LeetCode算法编程网站,上面目前有154道算法题,感觉很有意思,平常工作也比较忙,现在很少有时间来锻炼算法相关的东西,有空的时候静下心来,温习下基础,活跃下自已的思路,也是有必要的.先做了几道,后面会陆续补充其它的题目. 1.题目-PlusOne Given a non-negative number represented as an array of digits, plus one to the number. The digits are stored s

算法是什么我记不住,But i do it my way. 解一道滴滴出行秋招编程题。

只因在今日头条刷到一篇文章,我就这样伤害我自己,手贱. 刷头条看到一篇文章写的滴滴出行2017秋招编程题,后来发现原文在这里http://www.cnblogs.com/SHERO-Vae/p/5882357.html.看了下,挺有意思,于是就想了想,又写了写,最终撸出来了.刚开始一看顿时感觉很熟悉,大学数据结构和算法课肯定讲过相关东西,什么深度搜索,广度搜索,最优路径,最优解...但是现在你让我说个一二三,我还就只记住几个名字,说不定名字都记错.我向来不喜欢死记东西,能查到的真的不想背下来,而

算法导论第1章参考答案与编程题选

系列地址:算法导论(CLRS)参考答案与配套编程题选 1.1 算法 1.1-1 例如大学生学期统计排序以分配奖学金等等. 1.1-2 例如解决问题需要使用的内存等等. 1.1-3 顺序表,优点有支持随机查找,可以在\(O(1)\)内查找元素,缺点是增添/删除元素不方便. 1.1-4 相似:都可以通过带有加权边的图来模拟解决总距离最小化问题. 不同:最短路径和旅行商问题考虑的顶点情况不同,导致复杂度不同. 1.1-5 只有最佳解才行:使用相同外观的钥匙开锁,只有正确的钥匙能打开. 获得近似解也行:

算法导论第2章参考答案与编程题选

系列地址:算法导论(CLRS)参考答案与配套编程题选 2.1 插入排序 练习2.1-1 原题为 \(A=<31,41,59,26,41,58>\) , 每一次排序后变化如下: 为了演示效果,所有值统一减 \(10\). 下面演示对 \(A=<21,31,49,16,31,48>\) 的排序过程: 练习2.1-2 重写为非升序排序结果如下: 点击查看大图 原文地址:https://www.cnblogs.com/accepteddoge/p/8710241.html

算法导论第2章编程题自选

系列地址:算法导论(CLRS)参考答案与配套编程题选 练习2.3-7 配套编程题 :两数之和 (Two Sum) - LeetCode / LeetCode-CN 原文地址:https://www.cnblogs.com/accepteddoge/p/8718095.html