C++面试题一大波

原创 2015年07月09日 15:27:39
//打印1到最大的n位数。
//题目:输入数字n,按顺序打印出从1到最大的n位十进制数。比如:
//输入3,则打印出1、2、3一直到最大的3位数999.
//[陷阱]:这个题目很容易想到的办法就是先求出最大的数。然后循环输出就可以了。
#include <iostream>
#include <string.h>
using namespace std;
void Grial(char *str, char *s)
{
    if (*s == '\0')
    {
        cout << str << endl;
        return;
    }
    else
    {
        for (int i = 0; i <= 9; i++)
        {
            Grial(str,s+1);
            *s = '1' + i;
        }
    }
}
void Grial(int x)
{
    char *s = new char[x];
    memset(s,'0',sizeof(s));
    *(s + x) = '\0';
    char *str = s;
    Grial(str, s);
}
int main()
{
    Grial(2);
    return 0;
}
#include <iostream>
using namespace std;

void Grial(char *str,int n)
{
    int count = 1;
    char *p = str+n;
    while (count != 0 && *str != '1')
    {
        if (*p - '0' + count >= 10)
        {
            *p = '0';
            count = 1;
        }
        else
        {
            *p += count;
            count = 0;
        }
        p--;
    }
}
void Grial(int x)
{
    char *str = new char[x + 1];
    memset(str, '\0', sizeof(str));
    for (int i = 0; i <= x; i++)
    {
        strcat(str,"0");//多开辟一位,用来作为终止判断条件。
    }
    char *p = str;
    while (1)
    {
        p = str;
        Grial(p,x);
        p = str;
        while (*p == '0')p++;
        if (*str == '1' && p == str)break;//终止位置。
        cout << p << endl;
    }
}
int main()
{
    Grial(3);
    return 0;
}
#include <iostream>
using namespace std;
/*
3.数值的正数次方
题目:
实现函数double power(double base, int exponent),
求base的exponent次方,不得使用库函数,不需要考虑大数问题。
注意:考虑非法输入的返回。
*/

double GetSum(double base,int exponent)
{
    double count = 1;
    while (exponent)
    {
        count *= base;
        exponent--;
    }
    return count;
}
double power(double base,int  exponent)
{
    if (base == 0)return 0;
    if (exponent == 0)
        return 1;
    double count = 1;
    if (exponent > 0)
    {
        count = GetSum(base,exponent);
    }
    else
    {
        count = 1/GetSum(base, -exponent);
    }
    return count;
}
int main()
{
    cout << power(2, -2) << endl;
    return 0;
}
#include <iostream>
using namespace std;
//求数组中出现次数超过一半的数字。
int Grial(int a[], int low,int high,int M)
{
    int i = low;
    int j = high;
    if (i >= j)return 0 ;
    int key = a[i];
    while (i < j)
    {
        while (i < j && a[j] > key)j--;
        a[i] = a[j];
        while (i < j && a[i] < key)i++;
        a[j] = a[i];
        if(i<j)
        {
        i++;
        j--;
        }
    }
    a[i] = key;
    if (i >= M)
    {
        return a[i];
    }
    else if (i<M)
    {
        return Grial(a, i + 1, high, M);
    }
    else
    {
        return Grial(a, low, i - 1, M);
    }
}
int main()
{
    //int a[] = {0,1,1,2,1,1,2};
    int a[] = { 0, 1, 1, 1, 1, 1, 1, 4, 2, 3, 4 };
    int n = sizeof(a)/sizeof(int);
    int mid = (n % 2 == 0) ? (n / 2 + 1) : n / 2;
    cout << Grial(a,0,n-1,mid) << endl;
    return 0;
}


#include <iostream>
using namespace std;
//求数组中出现次数超过一半的数字。
int Grial(int a[], int n)
{
    int count = 0;
    int val;
    for (int i = 0; i < n; i++)
    {
        if (count == 0)
        {
            val = a[i];
        }
        if (val == a[i])
        {
            count++;
        }
        else
        {
            count--;
        }
    }
    return val;
}
int main()
{
    int a[] = { 0, 1, 1, 1, 1, 1, 1, 4, 2, 3, 4 };
    cout << Grial(a, sizeof(a) / sizeof(int));
    return 0;
}
/*
调整数组使奇数全部都位于偶数前面。
题目:
输入一个整数数组,实现一个函数,
来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,
所有偶数位于数组的后半部分。
*/


/*#include <iostream>
using namespace std;
void Grial(int a[], int n)
{
    int i = -1;
    int j = 0;
    while (j<n)
    {
        while (a[j] % 2 == 0)j++;
        i++;
        if (j == n)break;
        if (i != j)
        {
            a[i] ^= a[j];
            a[j] ^= a[i];
            a[i] ^= a[j];
        }
        j++;
    }
}
int main()
{
    int a[] = { 4, 5, 3, 1, 4, 6, 7, 8, 0, 6, 5643, 5, 6,1 };
    Grial(a, sizeof(a)/sizeof(int));
    for (int i = 0; i < 14; i++)
    {
        cout << a[i] << "  ";
    }
    cout << endl;
    return 0;
}
/*
3.数字在排序数组中出现的次数。
题目:
统计一个数字在排序数组中出现的次数。例如:排序数组{1,2,3,3,3,3,4,5}
和数字3,由于3出现了4次,因此输出4.
*/
#include <iostream>
using namespace std;

int Grial(int a[], int n,int val)
{
    //二分查找。
    int i = 0;
    int j = n - 1;
    int mid;
    int count = 0;
    while (i <= j)
    {
        mid = (i + j) / 2;
        if (a[mid]>val)
        {
            j = mid - 1;
        }
        else if (a[mid] < val)
        {
            i = mid + 1;
        }
        else
        {
            i = mid - 1;
            j = mid + 1;
            count++;
            while (a[i--] == val)count++;
            while (a[j++] == val)count++;
            return count;
        }
    }
    return -1;
}
int main()
{
    int a[] = { 1, 2, 3, 3, 3, 3, 4, 5 };
    cout << Grial(a, sizeof(a) / sizeof(int),5) << endl;
    return 0;
}

一大波资源砸过来了~

借花献佛 各位小伙伴们,今天小编整理了一部分编程视频教程,教程内容是社会上比较知名的培训机构录制的,内容比较宽泛,涉及面广,有mysql ,nosql,linux,nginx,photo...
  • stonehan09
  • stonehan09
  • 2017年01月12日 10:27
  • 218

没有死!阿里公开Weex技术架构,还开源了一大波组件

阿里妹导读:本文主要为大家介绍飞猪 Weex 技术体系从无到有的过程,包括 Weex Ui 组件库的开发和发展,重点分享在 Weex Ui 层建设的一些经验,希望能对大家有所启发。 ...
  • zz901214
  • zz901214
  • 2018年01月26日 09:35
  • 1001

C/C++经典面试题(持续更新)

面试题1:变量的声明和定义有什么区别 为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但只能在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件...
  • zqixiao_09
  • zqixiao_09
  • 2015年12月06日 18:58
  • 4613

C++ 网络编程 数据结构 面试题罗列

在这里有我自己的面试问题,还有网上收集的。 1. connect方法会阻塞,请问有什么方法可以避免其长时间阻塞? 2. 网络中,如果客户端突然掉线或者重启,服务器端怎么样才能立刻知道? 3...
  • u010154685
  • u010154685
  • 2016年07月27日 11:43
  • 1744

2017下半年,一二线互联网公司JAVA面试题汇总

阿里巴巴 图片加载原理 模块化实现(好处,原因) JVM 视频加密传输 统计启动时长,标准 如何保持应用的稳定性 HashMap源码,SpareArray...
  • qq_41077703
  • qq_41077703
  • 2018年01月12日 13:42
  • 77

c++ 笔试面试题 难题精选 持续更新

//第一题 问下面的输出结果是 什么?#include #include using namespace std; class A { protected: int m_data; pub...
  • hnust_xiehonghao
  • hnust_xiehonghao
  • 2014年04月06日 19:42
  • 1900

金山面试题目(c++经典收藏1)

笔试题目(C++) 1. sizeof用法,和strlen的区别 2. 各种数据结构,如堆、栈、队列等的特征和作用 3. 什么是野指针,什么情况下会产生野指针,如何避免? 4.快速排序的时间复...
  • ghevinn
  • ghevinn
  • 2012年08月24日 15:53
  • 1188

C++经典面试题(一)

最近看一些面试题,觉得如果自己被问到了,并不能很利落的回答出来。 一是从来没有这个意识,二是没有认真的梳理下。 下面对这些题做出分析,哈!个人能力有限,其中难免有疏漏,欢迎大家补充咯! ...
  • u011694809
  • u011694809
  • 2015年06月27日 08:45
  • 5494

一大波水仙花来袭! ! !

package first; /*  * 水仙花数:  *     各位数字的立方和等于该数本身  *     例如:153是一个水仙花数  *     153 = 1*1*1 + 5*5*5 + ...
  • qq_36405484
  • qq_36405484
  • 2017年08月12日 09:50
  • 43

C++经典面试题(三)

21.用C++写个程序,如何判断一个操作系统是16位还是32位的? 【标准答案】定义一个指针p,打印出sizeof(p),如果节果是4,则表示该操作系统是32位,打印结果是2,表示是16位。 ...
  • u011694809
  • u011694809
  • 2015年06月27日 10:16
  • 1756
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++面试题一大波
举报原因:
原因补充:

(最多只允许输入30个字)