002_C/C++笔试题_简单算法程序

(一)冒泡排序法

 1 #include <iostream>
 2 using namespace std;
 3 void bubblesort(int a[], int m);
 4 int main(void)
 5 {
 6     int i;
 7     int array[]={5,4,8,44,56,4,5,9};
 8     bubblesort(array,sizeof(array)/4);/*sizeof(array)/4,取长度,int类型是4字节*/
 9     /*打印已经排序的数组*/
10     for(i = 0; i < sizeof(array)/4; i++)
11         printf("array[%d] = %d \n",i,array[i]);
12     return 0;
13 }
14 void bubblesort(int a[], int m)
15 {
16         int i,j,z;
17         int tmp;
18         for(i = 0; i < m; i++)  //外层循环控制循环次数
19         {
20             for(j = 0; j < m-1-i; j++)    //内层循环控制每次循环里比较的次数。
21             {
22                 if(a[j] > a[j+1])
23                 {
24                     tmp = a[j];
25                     a[j] = a[j+1];
26                     a[j+1] = tmp;
27                 }
28             }
29             /*打印未排序*/
30             for(z = 0; z < m-1-i;z++)
31                 printf(" %d \t",a[z]);
32             printf("\n");
33          }
34 }

运行结果

冒泡排序法的具体实现方法是这样的,从数组的第一个元素`arr[0]`开始,两两比较**(`arr[n],arr[n+1]`),如果前面的数大于后面的数(`arr[n] > arr[n+1]`),那么交换两个元素的位置,把大的数往后移动。这样依次经过一轮比较以后,最大的数将会被交换到最后的位置(arr[n-1])。

(二)选择排序法

 1 #include <iostream>
 2 using namespace std;
 3 void selectionsort(int a[],int m);
 4 int main(void)
 5 {
 6     int i;
 7     int array[]={5,4,8,44,56,4,5,9};
 8     selectionsort(array,sizeof(array)/4);/*sizeof(array)/4,取长度,int类型是4字节*/
 9     /*打印已经排序的数组*/
10     for(i = 0; i < sizeof(array)/4; i++)
11         printf("array[%d] = %d \n",i,array[i]);
12     return 0;
13 }
14 void selectionsort(int a[],int m)
15     {
16         int i,j;
17         int k;
18         int z;
19         int tmp;
20
21         for(i = 0; i < m-1; i++)//控制循环次数,n个数需要n-1次循环
22         {
23             k = i;
24             for(j = i+1; j < m ; j++)
25             {
26                 if(a[j] < a[k])
27                     k = j;
28             }
29             //i不等于k是就证明a[i]不是最小的,
30             //i等于k时证明a[i]就是本轮比较过程中最小的值
31             if(i != k)
32             {
33                 tmp = a[i];
34                 a[i] = a[k];
35                 a[k] = tmp;
36             }
37             /*打印未排序*/
38             for(z = i; z < m;z++)
39                 printf(" %d \t",a[z]);
40             printf("\n");
41         }
42     }

运行结果

选择排序法就是通过每一次循环查找出最大(小)的元素,通过下标记录最大(小)的元素,找完一轮之后将最大(小)的元素

放到前面,然后不再考虑这个元素。

(三)编写my_strcpy函数

strcpy函数:是一种C语言的标准库函数,strcpy把从src地址开始且含有‘\0‘结束符的字符串复制到以dest开始的地址空间,返回值的类型为char*。

 1 #include <iostream>
 2 using namespace std;
 3 char* my_strcpy(char *strDest,char *strSrc);
 4 int main(void)
 5 {
 6     char arr1[20] = { 1 };
 7     char arr2[20] = "abcdefghij";
 8     char *ret=my_strcpy(arr1,arr2);
 9     printf("%s\n", ret);//打印复制之后的字符串
10     return 0;
11 }
12 char* my_strcpy(char *strDest,char *strSrc)
13 {
14     if(strSrc == NULL)
15         return NULL;
16     if(strDest == strSrc)
17         return strDest;
18     char *temp = strDest;
19     while((*strDest++ = *strSrc++) != ‘\0‘);
20     return temp;
21 }

运行结果

(四)编写my_strcmp函数

strcmp函数:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇‘\0‘为止

 1 #include <iostream>
 2
 3 using namespace std;
 4
 5 #define MAX 10
 6
 7 int mystrcmp(const char *str1,const char *str2);
 8 int main(int argc,char *argv[])
 9 {
10         char value;
11         char str1[MAX],str2[MAX];
12
13         printf("Please input str1 and str2 :\n");
14         gets(str1);     //gets 和 printf的区别,gets可接收含空格的字符串,而scanf遇TAB,空格,回车即结束
15         gets(str2);
16
17         value = mystrcmp(str1,str2);
18         printf("value :%d\n",value);
19
20         return 0;
21 }
22
23 int mystrcmp(const char *str1,const char *str2)
24 {
25         char i = 0;
26         for(; i < MAX, *(str1+i) != ‘\0‘,*(str2+i) != ‘\0‘; i++)
27         {
28                 if(*(str1+i) == *(str2+i))
29                         continue;            //相等时继续比较下一位
30                 return (*(str1+i) > *(str2+i))?1:(-1);
31         }
32         return 0;
33 }
34         

运行结果

(五)编写my_strcat函数

strcat函数:是用来连接两个字符串的,原型是char *strcat(char *dest,char *src),作用是把src所指字符串添加到dest结尾处

 1 #include <iostream>
 2 using namespace std;
 3 char* MyStrcat(char *dst, const char *src);
 4 int main(void)
 5 {
 6     char str1[10] = "abc";
 7     char str2[] = "bcd";
 8     char* str3 = MyStrcat(str1, str2);
 9
10     printf("str1=%s\n", str1);
11     printf("str2=%s\n", str2);
12     printf("str3=%s\n", str3);
13     return 0;
14 }
15
16 char* MyStrcat(char *dst, const char *src)
17 {
18     char *temp = dst;
19     while (*temp != ‘\0‘)
20         temp++;
21     while ((*temp++ = *src++) != ‘\0‘);
22     return dst;
23 }

运行结果

(六)编写my_strlen函数

strlen函数:所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符‘\0‘为止,然后返回计数器值(长度不包含‘\0‘)。

 1 #include <iostream>
 2 using namespace std;
 3 int my_strlen(const char *str);
 4 int main(void)
 5 {
 6     printf("长度为:%d\n",my_strlen("abcd"));
 7     return 0;
 8 }
 9
10 int my_strlen(const char *str)
11 {
12     int count = 0;
13     while(*str++)
14         count++;
15     return count;
16 }

运行结果

原文地址:https://www.cnblogs.com/luxiaoguogege/p/9739142.html

时间: 2024-08-30 01:18:54

002_C/C++笔试题_简单算法程序的相关文章

003_C/C++笔试题_分享大汇总

(一)感谢:lhzstudio 01_C++经典面试题全集 50~100道 都附带有参考答案 02_C++开发工程师面试题库 100~150道 03_C++笔试题库之编程.问答题 150~200道 04_C++笔试题库之编程.问答题 200~300道 原文地址:https://www.cnblogs.com/luxiaoguogege/p/9786873.html

网易笔试题_塔的最小不稳定性

原题不再赘述,大概就是这么个意思: 输入n个数(均大于0)以及可以对这n个数进行操作的最多次数,每次操作将n个数中最大值-1,最小值+1,计算进行这样的操作后数组中(最大值-最小值)的最小值. java简单实现(暴力解) 1 package interview.test; 2 3 import java.util.*; 4 5 /** 6 * Created by BUAA514 on 2018-08-11. 7 */ 8 public class Main { 9 10 /** 11 * 题目

经典笔试题:简单实现一个死锁的例子

package com.gaopeng.multithread; /** * 简单实现一个死锁例子 * * @author gaopeng * */ public class DeadLockTest { // 创建资源 private static Object resourceA = new Object(); private static Object resourceB = new Object(); public static void main(String[] args) { //

2015小米暑期实习笔试题_懂二进制(位运算)

总共3道题,最后一道还没AC出来... 世界上有10种人,一种懂二进制,一种不懂. 那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么? 输入例子: 1999 2299 输出例子: 7 此题解法类似于<编程之美>上面看到的某题 代码: #include <iostream> using namespace std; int countBitDiff(int m, int n) { int sum=0; for(int i=0;i<32;i++) if(

2015小米暑期实习笔试题_风口的猪-中国牛市(dp)

风口之下,猪都能飞.当今中国股市牛市,真可谓"错过等七年". 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价. 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票.若两次交易机会都放弃,收益为0. 设计算法,计算你能获得的最大收益. 输入数值范围:2<=n<=100,0<=prices[i]<=100 输入例子: 3,8,

微软公司笔试题_附上源码解决

第一道题 # -*- coding: utf-8 -*- ''' f(a*b, acb) => true f(abc*, abbc) => false f(**bc, bc) => true ''' import re string='abbc' Regex = re.compile(r'(abc)*') def f(Regex,string): mo = Regex.search(string) if mo.group()!='': return True else: return F

科大讯飞笔试题_杀手

题目: 有n个杀手排成一行,每个杀手都有一个不同的编号(编号1-n),在每个夜晚,杀手都会行动,如果某个杀手编号大于他右边的杀手的编号,他就会杀死他右边的杀手,杀手的行动是瞬间的,因此一个人可能某一个夜晚既杀死了别人,又被别人杀死,例如3,2,1这个顺序,在第一个夜晚2会杀死1,同时,3会杀死2,显而易见,一段时间后,就不会有人被杀系,平安夜就到来了,请问在平安夜之前有多少个夜晚. 输入: 输入第一行是一个整数n(1<=n<=100000),表示杀手的数量: 接下来一行有n个数,是一个1-n的

迅雷笔试题_素勾股数的个数

题目: 勾股数,是由三个正整数组成的数组:能符合勾股定理 a*a + b*b = c*c ,(a, b, c) 的正整数解.如果 (a, b, c) 是勾股数,它们的正整数倍数,也是勾股数.如果 (a, b, c) 互质,它们就称为素勾股数.给定正整数N, 计算出小于或等于N的素勾股数个数. 样例输入: 10 样例输入: 1 思路: 产生素勾股数的方式: 设m > n .m 和n 均是正整数, a=m2-n2 b=2mn c= m2+n2 若m 和n 是互质,而且m 和n 其中有一个是偶数,计算

Java工程师笔试题整理[校招篇]

隔着两个月即将开始校招了.你是不是也想借着这个机会崭露头角,拿到某些大厂的offer,赢取白富美.走上人生巅峰?当然如果你还没能打下Java基础,一定要先打好Java基础:如何一步一步的学Java - 学习编程 - 知乎专栏.然后再来看一下练习一下各大厂的面试笔试题目. 如果以下内容满足不了你,你还可以去看这篇: 2016校招编程题汇总 - 学习编程 - 知乎专栏 进入主要内容(主要内容整理来自牛客网:牛客网)(以下内容按照各大公司进行划分,对每一公司按照年份进行划分,如果想想下载以下内容,可以