# C++面试题一大波

//打印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 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.数字在排序数组中出现的次数。

*/
#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;
}
• 本文已收录于以下专栏：

## 一大波资源砸过来了～

• stonehan09
• 2017年01月12日 10:27
• 218

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

• zz901214
• 2018年01月26日 09:35
• 1001

## C/C++经典面试题（持续更新）

• zqixiao_09
• 2015年12月06日 18:58
• 4613

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

• u010154685
• 2016年07月27日 11:43
• 1744

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

• qq_41077703
• 2018年01月12日 13:42
• 77

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

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

## 金山面试题目（c++经典收藏1）

• ghevinn
• 2012年08月24日 15:53
• 1188

## C++经典面试题(一)

• u011694809
• 2015年06月27日 08:45
• 5494

## 一大波水仙花来袭! ! !

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

## C++经典面试题(三)

21.用C++写个程序，如何判断一个操作系统是16位还是32位的？ 【标准答案】定义一个指针p，打印出sizeof(p),如果节果是4，则表示该操作系统是32位，打印结果是2，表示是16位。 ...
• u011694809
• 2015年06月27日 10:16
• 1756

举报原因： 您举报文章：C++面试题一大波 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)