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;
}

相关文章推荐

程序员证明自己智商的时候到了,一大波智力面试题正在靠近

与传统的面试不同,程序设计面试题以程序设计题、IQ智力题及各种与计算机相关的技术性问题为主。其中智力题,每个正式的笔试、面试都会出,而且在面大企业的时候必然会问到,下面介绍几个面试智力题。 ...

机器学习书籍一大波

  • 2017年11月07日 19:51
  • 48B
  • 下载

腾讯面试题总结,似乎是面试C++方向的(小巫总结)

腾讯面试题总结,似乎是面试C++方向的(小巫总结) 这份面试题是我在网上收集到的,是C++的,本人是搞Java的,C++以前也稍微接触过,在这里我稍微总结一下这份面试题,供需要的人参考。 ...
  • wwj_748
  • wwj_748
  • 2013年09月22日 20:28
  • 23383

一大波超级经典好看的英文字体

  • 2015年09月04日 09:30
  • 4.1MB
  • 下载

一大波设计用经典好看中文字体

  • 2015年09月04日 09:49
  • 42.11MB
  • 下载

【C++面试题】利用两个栈实现1个队列

1、题目   利用两个栈实现一个队列    2、要求   只能使用栈的pop(),top()和push(),以及测试栈是否为空empty()四个操作. 来实现队列的empty(), ...

大波霸炒股机

  • 2013年02月04日 06:01
  • 7.8MB
  • 下载

C/C++面试题-2 之2/2

之2/2 45. 如何判断一个单链表是有环的?(注意不能用标志位,最多只能用两个额外指针)   struct node { char val; node* next;}   bool check(c...
  • dcw0402
  • dcw0402
  • 2013年02月07日 21:44
  • 1651

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

面试题1:变量的声明和定义有什么区别 为变量分配地址和存储空间的称为定义,不分配地址的称为声明。一个变量可以在多个地方声明,但只能在一个地方定义。加入extern修饰的是变量的声明,说明此变量将在文件...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++面试题一大波
举报原因:
原因补充:

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