银行信息科技岗编程题目汇总

以下分为两部分,第一部分编程题目汇总,第二部分为题目答案。

一、编程题目(三道题,分值是40 40 20,时间50分钟)
1.判断一个数是不是素数?”(质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。自然数,表示物体个数的数0、1、2、3、4、5、6、……叫自然数。)
判断素数
2.“判断从1990到2010年中的瑞年?并打印(1、能整除4且不能整除100 2、能整除400)
判断闰年
3.“输入几个单词,将字母变换成另外一组单词输出?如果字母是i,则变换后的字母是26+i-1
字符转换
4.找出正整数中偶数,并输出相加后的数,要用 long.
5.输入 n 和 b , 找出 1 到 n 中被 b 整除的个数.
6.爬一个或者两个台阶,输入 1 <= n < 90 的数字为台阶数,以输入 0 作为结束标志,输出n个台阶共有多少种上楼方式.
7.N的阶乘
8.输入十个数,最大数和最后一个数交换,最小树和第一个数交换
9.猴子吃桃子题目:猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?
10.分段函数实现
11.A,B两个字符串,求在第一个字符串出现,第二个字符串中未出现的,重复只取第一次出现,输出字符串。
12.凯撒密码加密解密,就是给你由大写字母组成的字符串,求出原来的字符串,加密
13.把字符串中的字符a和A换成c输出
14.给你年月日,求出是这年的第几天
15.给你两个数,例如23和456,23 * 456=2 * 4 2 * 5 2 * 6 3 * 4 3 * 5 3 * 6,让你实现这个算法。
https://blog.csdn.net/helloa_world/article/details/86813145
16.是数组调整顺序输出,
17.字符串反转
18.是什么环来着,几个人围成一堆报数淘汰,
19.如果输入一个字母是小写字母将其转换成大写字母
20.比较两个字符串的长度
21.快排
22.一个是数字交换,
23.一个是字符串反转,
24.一个是约瑟夫环问题
已知n个人(以编号0,2,3…n-1分别表示)围坐在一起。从编号为0的人开始报数,数到k的那个人出列;他的下一个人又从1开始报数,数到k的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列,最后一个出列的人为胜利者。求胜利者编号.
25.字符串反转;
26.1+2/3+3/5+4/7+…数列求和,输出结果;
27.输入一个字符串,不同的单词用空格隔开,把这些单词的首字母取出并大写输出,如输入:hello world,输出:HW,不过代码都是要求你实现多行输入的输出的,输入0则停止输入。
28.①输入一个数字要求输出该数字各个位上偶数的和,如输入5584,输出12
29.②输入一组数N和数字b ,求出该组数字中能被b 整除的个数。如输入1 2 3 4 5 6和 2,结果输出为3。
30.③求N阶楼梯共有多少种上楼方式,每次只能上1个或2个台阶。
31.字符串反转
32.数列求和
33.字符串缩写
34.A,B两个字符串,求在第一个字符串出现,第二个字符串中未出现的,重复只取第一次出现,输出字符串。
35.分段函数实现、两个字符串查重、凯撒密码,分值分别是40,40,20。
36.字符串逆转,大小写,数列求和
37.加密解密,就是给你由大写字母组成的字符串,求出原来的字符串,加密 。方式很简单就是字符串后移五位,比如原来是A加密后是F,其余数字等标点符号原样输出.
38.从求组中找出唯一出现一次得数。
39.字符串逆序输出,数列和,小写转大写
40.把字符串中的字符a和A换成c输出。
42.给你年月日,求出是这年的第几天
43.给你两个数,例如23和456,23456=24 25 26 34 35 3*6,让你实现这个算法。
44.给出一串数字123456 将偶数位置的数字输出 246
45.C++给出两个时间,求时间间隔
给出两个时间例如726、1124 即为7点26,11点24,求时间间隔 x h x s
46.把一个数组中的0移动到数组的后面
47.一个是数字交换,一个是字符串反转,还有一个是约瑟夫环问题,
48.数组调整顺序输出,第二道是字符串反转,第三道是什么环来着,几个人围成一堆报数淘汰,感觉不是很难
49.给年月日,判断是方面第几天。
50.小球从100米下落,每次回弹一半距离,第几次落地后的总距离。
51.求阶乘的和,
去掉字符串末尾的空格,
喝汽水问题
52.输入一段话,输出字的个数
53.非完全平分数的判断
54.字符串反转;
55.计算1+2/3+3/5+4/7…
56.给出一个字符串,单词之间用空格隔开,读取这些单词的首字母并大写输出
57.输入数字并排序
58.如果输入一个字母是小写字母将其转换成大写字母
59…比较两个字符串的长度
60.快排
61.给出一串数字123456 将偶数位置的数字输出 246
62.给出两个时间例如726、1124 即为7点26,11点24,求时间间隔 x h x s
63.把一个数组中的0移动到数组的后面
64.给定一个正整数 num,编写一个函数,如果 num 是一个完全平方数,则返回 True,否则返回 False。
65.给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
66.给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。
67.给定一个非负整数 numRows,生成杨辉三角的前 numRows 行。
68.给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。
69.给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。

二、编程题目答案
1.判断一个数是不是素数?”(质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。自然数,表示物体个数的数0、1、2、3、4、5、6、……叫自然数。)
//判断素数
#include
using namespace std;
int issushu(int n)
{
int i = n;
if (i < 2)
return 0;
else
{
for (i = n - 1; i >= 2; i–)
{
if (n%i == 0)
return 0;
}
}
return 1;
}
int main()
{
int n;
cin >> n;
if (issushu(n))
cout << “true” << endl;
else
cout << “false” << endl;
return 0;
}
//method2:
#include
using namespace std;
int issushu(int a)
{
if (a > 2)
{
int i;
for (i=a-1;i>2;i–)
{
if (a%i == 0)
return 1;
else
return 0;
}
}
}
int main()
{
int a; cin >> a;
if (issushu(a))
cout << “a是素数” << endl;
else
cout << “a不是素数” << endl;
return 0;
}

2.“判断从1990到2010年中的瑞年?并打印(1、能整除4且不能整除100 2、能整除400)
判断闰年
#include
using namespace std;
int main()
{
//输出从1990年到2010年之间的闰年
for (int i = 1990; i <= 2010; i++)
{
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
{
cout << i << endl;
}
}
return 0;
}
//method2:
//判断从1990到2010年中的瑞年?并打印
#include
using namespace std;
int main()
{
for (int i = 1990; i <= 2010; i++)
{
if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)
cout << i<<endl;
}
return 0;
system(“pause”);
}

3.“输入几个单词,将字母变换成另外一组单词输出?如果字母是i,则变换后的字母是26+i-1
字符转换
#include
using namespace std;
int main()
{
char a[100]; int n = 0;
cin.getline(a, 100);//cin.getline(字符指针(char*),字符个数N(int),结束符(char));函数会一次读取多个字符(包括空白字符)直到读满N-1个,或者遇到指定的结束符为止。若不指定结束符,则默认结束符为’\0’ 只用于取字符
while (a[n] != ‘\0’)
{
n++;
}
for (int i = 0; i < n; i++)
{
if (a[i] >= ‘a’&&a[i] <= ‘z’)
{
a[i] = ‘z’ - (a[i] - ‘a’);
}
if (a[i] >= ‘A’&&a[i] <= ‘Z’)
{
a[i] = ‘Z’ - (a[i] - ‘A’);
}
}
for (int i = 0; i < n; i++)
{
cout << a[i];
}
cout << endl;
return 0;
}
//method2:
#include
using namespace std;
int main()
{
char a[100];
cin.getline(a,100);
int len = strlen(a);
for (int i = 0; i < len; i++)
{
if (a[i] >=‘a’&&a[i] <=‘z’)
a[i] = ‘z’ - (a[i] - ‘a’);
if (a[i] >= ‘A’&&a[i] <= ‘Z’)
a[i] = ‘Z’ - (a[i] - ‘A’);
}
cout << a << endl;
return 0;
}

4.找出正整数中偶数,并输出相加后的数,要用 long.
//1.找出正整数中偶数,并输出相加后的数,要用 long.
#include
using namespace std;
int main()
{
int a;
cin>>a;
//计算数字长度
int len = 1;
int t = a;
while (t>9)
{
len *= 10;
t /= 10;
}
//printf("%d",len);
//找出偶数并求和
int sum = 0;
while (a>0)
{
int i = a / len;
if (i % 2 == 0)
{
sum += i;
}
a = a%len;
len /= 10;
}
cout << sum;
return 0;
}
//method2:
#include
using namespace std;
int length(int a)
{
int len = 1;
while (a > 9)
{
a = a / 10;
len++;
}
return len;
}
int main()
{
int a, sum = 0, bite = 10; cin >> a;
int len = length(a);
for (int i = 0; i < len; i++)
{
int b = a % bite;
if (b % 2 == 0)
{
sum = sum + b;
}
a = a / bite;
}
cout << sum << endl;
return 0;
}

5.输入 n 和 b , 找出 1 到 n 中被 b 整除的个数.
#include
using namespace std;
int findgeshu(int n, int b)
{
int len = 0;
for (int i = 1; i <= n; i++)
{
if (b%i == 0)
len += 1;
}
return len;
}
int main()
{
int n, b;
cin >> n;
cin >> b;
cout << findgeshu(n, b)<<endl;
return 0;
}

6.爬一个或者两个台阶,输入 1 <= n < 90 的数字为台阶数,以输入 0 作为结束标志,输出n个台阶共有多少种上楼方式.
#include
using namespace std;
int main()
{
int steps,sum1=1, sum2 = 2,sum=0;
cin >> steps;
if (steps >= 3)
{
for (int i = 3; i <=steps; i++)
{
sum = sum1 + sum2;
sum1 = sum2;
sum2 = sum;
}
}
else if (steps ==1)
sum = 1;
else if(steps ==2)
sum = 2;

cout << sum << endl;
return 0;

}

7.N的阶乘
#include
using namespace std;
int main()
{
int N,sum=1;
cin >> N;
for (int i = 1; i <= N; i++)
{
sum *= i;
}
cout << sum << endl;
return 0;
}
8.从键盘输入10个整数,将其中最小的数与第一个数交换,最大的一个数与最后一个数交换
#include
using namespace std;
int main()
{
int a[10];
for (int i = 0; i < 10; i++)
cin >> a[i];
for (int i = 0; i < 10; i++)
cout << a[i] ;
cout << endl;
int min = a[0], max = a[0];
for (int i = 0; i < 10; i++)
{
if (min > a[i])
min = a[i];
if (max < a[i])
max = a[i];
}
a[0] = min;
a[9] = max;
for (int i = 0; i < 10; i++)
cout << a[i];
cout << endl;
return 0;
}
9.//猴子吃桃子题目:猴子第一天摘了若干个桃子,当即吃了一半,还不解馋,又多吃了一个;
//第二天,吃剩下的桃子的一半,还不过瘾,又多吃了一个;
//以后每天都吃前一天剩下的一半多一个,到第10天想再吃时,只剩下一个桃子了。问第一天共摘了多少个桃子?

#include
using namespace std;
int main()
{
int N, S = 1;
for (int i = 1; i < 10; i++)
{
S = 2 * S + 2;
}
cout <<"The first day of picking peaches number are "<<S << endl;
return 0;
}

//method2:
#include
using namespace std;
int peachnumber(int day)
{
if (day == 10)
return 1;
else
return 2 * peachnumber(day + 1);
}
int main()
{
int sum;
sum = peachnumber(1);
cout << “the total number of peach is” <<sum<< endl;
}

switch(表达式){
case 值1:
表达式的值和 值1匹配上了,需要执行的代码;
break;
case 值2:
表达式的值和 值2匹配上了,需要执行的代码;
break;
case 值3:
表达式的值和 值3匹配上了,需要执行的代码;
break;
default:
如果表达式的值和以上的case后面的值都没有匹配上,那么就执行这里的代码。
break;
}
#include
using namespace std;
int main()
{
int x, y;
cin >> x;
switch (x)
{
case 1:
y = x + 1;
break;
case 2:
y = 1;
break;
default:
y = xxx;
break;
}
return 0;
}
//编程实现以下分段函数:
//当x<0时,y = x + 1
// 当0 <= x<1时,y = 1
// 当x >= 1 时,y = xxx
//程序的运行结果如下所示:
// 输入:1.5
// 输出:3.375
#include
using namespace std;
int main()
{
int x, y;
cin >> x;
if (x < 0)
y = x + 1;
else if (0 <= x &&x < 1)
y = 1;
else
y = xxx;
cout << y << endl;
return 0;
}

12.凯撒密码加密解密,将一个字符按一定的规则简单的代换为另一个字符实现加密
就是给你由大写字母组成的字符串,求出原来的字符串,加密
加密解密公式,就是位移量为3时的结果
加密公式: f(a)=(a+N) mod 26
解密公式: f(a)=(a+(26-N)) mod 26
先加密,把加密后的密文反过来用解密算法解密,如果得到的明文和原来的明文是一样
https://blog.csdn.net/qq_36134761/article/details/80385862
#include<stdio.h>
#include
#include<stdlib.h>
#include <string.h>
#define N 100
using namespace std;
//凯撒密码
//加密公式 f(a)=(a+3) mod 26
//解密公式 f(a)=(a+23) mod 26
void Encry(char *strI, int numB, int model);//加密公式函数
void Decry(char *strI, int numB, int model);//解密公式函数
int FileOut(char *strI);
int main()

{

char str[N];
int model;
int numB;

while (1)
{
	cout << "凯撒密码:请选择模式:\n";
	cout << "1.加密\n";
	cout << "2.解密\n";
	cout << "3.退出\n";
	cin >> model;
	cout << endl;

	switch (model)
	{
	case 1:
		cout << "请输入要加密的字符串:";
		cin >> str;
		cout << "请输入该密码算法的偏移数量:";
		cin >> numB;
		Encry(str, numB, model);
		cout << endl;
		break;
	case 2:
		cout << "请输入要解密的字符串:";
		cin >> str;
		cout << "请输入原密码算法的偏移数量:";
		cin >> numB;
		Decry(str, numB, model);
		cout << endl;
		break;
	case 3:
		return 0;
		break;
	default:
		break;

	}
}
return 0;

}

void Encry(char *strI, int numB, int model)
{//明文串 秘钥 功能模式
if (model == 1)
{
for (int i = 0; i<strlen(strI); i++)
{
if (strI[i] >= ‘A’ && strI[i] <= ‘Z’)
{
strI[i] = ((strI[i] - ‘A’) + numB) % 26 + ‘A’;
}
else if (strI[i] >= ‘a’ && strI[i] <= ‘z’)
{
strI[i] = ((strI[i] - ‘a’) + numB) % 26 + ‘a’;
}
}
cout << “加密完成:” << strI << endl;

	FileOut(strI);

	cout << "已输出到文件!" << endl;
}
else
{
	cout << "该模式不支持此项功能!" << endl;
}

}

void Decry(char *strI, int numB, int model)
{
if (model == 2)
{
int num;
num = 26 - numB;
for (int i = 0; i<strlen(strI); i++)
{
if (strI[i] >= ‘A’ && strI[i] <= ‘Z’)
{
strI[i] = ((strI[i] - ‘A’) + num) % 26 + ‘A’;
}
else if (strI[i] >= ‘a’ && strI[i] <= ‘z’)
{
strI[i] = ((strI[i] - ‘a’) + num) % 26 + ‘a’;
}
}
cout << “解密完成:” << strI << endl;
}
else
{
cout << “该模式不支持此项功能!” << endl;
}
}

int FileOut(char *strI)
{
FILE *fp = NULL;
int iWrite = 0;
int len = strlen(strI);
if (strI == NULL || len == 0)
return false;
//! 打开文件句柄
if ((fp = fopen(“密文.txt”, “w”)) == NULL) // 文本模式写
return false;
iWrite = fwrite(strI, 1, len, fp);
fclose(fp);
if (iWrite>0)
return true;
else
return false;
}

13.把字符串中的字符a和A换成c输出 char str[100]
#include
using namespace std;

int main()
{
char a[100];
cin.getline(a, 10);
int len = strlen(a);
cout << a<<endl;
for (int i = 1; i < len; i++)
{
if ((a[i] == ‘a’ )||( a[i] == ‘A’))
a[i] = ‘c’;
}
a[len] = ‘\0’;
cout << a << endl;
return 0;
}

14.// 给出年月日 计算该日是该年的第几天
#include
using namespace std;
int leap(int year)
{
int leap = (year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0);
return leap;
}
int sumday(int day, int month,int days)
{
int monthtable[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
for (int i = 0; i < month-1; i++)
{
days = days+monthtable[i];
}
days = days + day;
return days;
}
int main()
{
int year, month, day, days = 0;
cout << “input year,month,day:”;
cin >> year>> month>> day;
days= sumday(day,month,days);
if (leap(year)&&(month>=3))
{
days += 1;
}
cout << "the total day are: "<<days;
return 0;
}

16.// 数组调整顺序输出
#include
using namespace std;
void reverseTwo(int *a,int len)
{
int i=0, j= len-1, temp;
while (i < j)
{
temp = *(a+i);
*(a + i) = *(a + j);
*(a + j) = temp;
i++;
j–;
}

}
int main()
{
int a[5];
int len = 5;
for (int k = 0; k < len; k++)
cin >> a[k];
reverseTwo(a,len);
for (int k = 0; k < len; k++)
cout << a[k];
return 0;
}

17.// 字符串反转
#include
using namespace std;
void reversechar(char *a, int len)
{
int j=0, k=len-1,temp;
while (j < k)
{
temp = *(a + j);
*(a + j) = *(a + k);
*(a + k) = temp;
j++;
k–;
}
}
int main()
{

char a[6];
int len = 6;
//cin.getline(a, 6);
for (int i = 0; i < len; i++)
	cin>> a[i];
reversechar(a, len);
for (int t = 0; t < len; t++)
	cout << a[t];
cout << endl;
return 0;

}
18.// 有N个人,从1到N编号,按照编号顺序围成一圈。从第一个人开始报数(从1报到3),凡报到3的人退出圈子。问:最后留下的人的编号是几号。
#include
using namespace std;
void left_num(int* a, int n, int m) {
int out = 0, count = 0, i = 0; //out为出去的人数,count为报数,i为目前报到第几个人 //i为每次循环时计数变量
int *p = a;
int num = 0;
for (num = 0; num < n; num++) {
(a + num) = num + 1;
} //以1至n为序,给每个人编号
while (out < n - 1) { //当退出人数比n-1少时(即未退出人数大于1时)执行循环体
if (
(p + i) != 0) {
count++; //不等于0才报数+!
}
if (count == m) { //将退出人的编号置为0
count = 0;
(p + i) = 0;
out++; //报道m那么,出列人数out+1,且内容置0,报数置0
}
i++;
if (i == n) {
i = 0; //到队尾重头开始 //报数到尾后i恢复为0
}
}
//输出剩下的人
for (num = 0; num < n; num++) {
if (
(a + num) != 0) {
cout<<“left num:”<< *(a + num);
}
}
}

int main()
{
int m, n;
int a[50] = { 0 };
cout<<“Please input total num:”;
cin>>n;
cout << “Please input out num:”;
cin >>m;
left_num(a, n, m);
return 0;
}

19.// 如果输入一个字母是小写字母将其转换成大写字母
#include
using namespace std;
int main()
{
char a;
cin >> a;
if ((‘a’ <= a) && (‘z’ >= a))
a = a -32;
cout << “the changed number is:” << a;
return 0;
}
20.// 比较两个字符串的长度
#include
#define N 100
using namespace std;
void compare(char *a, char b)
{
fgets(a, N, stdin);
fgets(b, N, stdin);
int i = 0, j = 0,len1=0, len2 = 0;
//if (strlen(a) < strlen(b))
// cout << “a小于b” << endl;
// else if (strlen(a) > strlen(b))
// cout << “a大于b” << endl;
// else
// cout << “a等于b” << endl;
while (
(a + i) != ‘\0’)
{
len1++;
i++;
}

while (*(b + j) != '\0')
{
	len2++;
	j++;
}
if (len1 < len2)
		cout << "a小于b" << endl;
	else if (len1 > len2)
		cout << "a大于b" << endl;
	else 
		cout << "a等于b" << endl;

}
int main()
{
char a[100],b[100];
compare(a, b);
return 0;
}

21.C++实现快速排序
#include
using namespace std;
#include <stdio.h>
int a[101], n;//定义全局变量,这两个变量需要在子函数中使用
void quicksort(int left, int right) {
int i, j, t, temp;
if (left > right)
return;
temp = a[left]; //temp中存的就是基准数
i = left;
j = right;
while (i != j) { //顺序很重要,要先从右边开始找
while (a[j] >= temp && i < j)
j–;
while (a[i] <= temp && i < j)//再找右边的
i++;
if (i < j)//交换两个数在数组中的位置
{
t = a[i];
a[i] = a[j];
a[j] = t;
}
}
//最终将基准数归位
a[left] = a[i];
a[i] = temp;
quicksort(left, i - 1);//继续处理左边的,这里是一个递归的过程
quicksort(i + 1, right);//继续处理右边的 ,这里是一个递归的过程
}
int main() {
int i;
//读入数据
cin>>n;
for (i = 1; i <= n; i++)
cin >> a[i];
quicksort(1, n); //快速排序调用
//输出排序后的结果
for (i = 1; i < n; i++)
cout <<a[i];
return 0;
}
22.// 比较两个字符串的长度
#include
using namespace std;
//void swap(int *a, int *b)
//{
// int temp;
// temp = *a;
// *a = *b;
// *b = temp;
//
//}
void swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;

}
int main() {
int a = 50, b = 60;
swap(a, b);
cout << a << endl;
cout << b << endl;
return 0;
}
23.// 比较两个字符串的长度
#include
using namespace std;
int main() {
char a[100];
cin.getline(a, 5);
for (int j = 0; j < strlen(a); j++)
cout << a[j];
cout << endl;
int i = 0, j = strlen(a)-1;
char temp;
while (i < j)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j–;
}
for (int k= 0; k < strlen(a); k++)
cout << a[k];
return 0;
}

24.// 1+2/3+3/5+4/7+…数列求和,输出结果;
#include
using namespace std;
int main() {
float sum = 0, a, b;
int n;
cout << “the tatol items:”;
cin >> n;
for (int i = 0; i < n; i++)
{
a = i + 1;
b = 2 * i + 1;
sum = sum + a / b;
}
cout << “the sum is:” << sum;
return 0;
}

27.// 输入一个字符串,不同的单词用空格隔开,把这些单词的首字母取出并大写输出,如输入:hello world,输出:HW,不过代码都是要求你实现多行输入的输出的,输入0则停止输入。
#include
#include
using namespace std;
int length_string(char *s)
{
int len = 0;
while (*s != ‘/0’)
{
s++;
len++;
}
return len;
}
int main() {
char str[100];
cin.getline(str, 15);
if ((str == ‘\0’))
{
return 0;
}
int length = length_string(str);
int t = 0;
for (int i = 0; i < length; i++)
{
if (i == 0)
{
str[0] = str[0] - 32;
}
if ((str[i] == ’ ') || (str[i] == ‘,’))
{
str[i + 1] = str[i + 1] - 32;
}
}
for (int i = 0; i <length; i++)
{
if ((‘A’ <= str[i]) && (‘Z’ >= str[i]))
cout << str[i];
}
return 0;
}

29.//给两个字符串,删除第一个字符串中与第二个字符串中字符相同的字符,并输出删除后的第一个字符串内容。
//要求:字符串以字符指针的形式输入。字符串内容包括下划线、空格。
//例如:字符串1为"The book is good!",字符串2为“ho oe”,输出为“Tbkisgd”。https://blog.csdn.net/wangqiaozhi/article/details/17842633
#include
#include
using namespace std;
char *deleteRepeatChar(char *b)//删除字符串中相同的字符
{
int length = strlen(b),n=0;
if (b[0] == ‘\0’)
{
return 0;
}
for (int i = 0; i<length; i++) { //将重复的字母标记为0
for (int j = i + 1; j<length; j++) {
if (b[i] == b[j])
b[j] = ‘\0’;
}
}
for (int i = 0; i<length; i++) {
if (b[i] != 0)
b[n++] = b[i];
}
b[n] = ‘\0’;
return b;
}

void deleteRepeatString(char *a, char *b, char *result,int count)
{
for (int i = 0; i < a[i] != ‘\0’; i++)
{
for (int j = 0; j < b[i] != ‘\0’; j++)
{
if (a[i] == b[j])
{
i++;
continue;
}
}
result[count++] = a[i];
}
result[count] = ‘\0’;
}
int main() {
char str1[100], str2[100], result[100];
int count =0;
cout << “输入一字符串” << endl;
cin.getline(str1, 99);
cin.getline(str2, 99);
char *b=deleteRepeatChar(str2);
deleteRepeatString(str1, b, result, count);
//for (int k = 0; k < count; k++)
// cout << result[k];

for (int k = 0; result[k] != ‘\0’; k++)
cout << result[k];
return 0;
}

30.整型数组里只出现一次的数字
//找出一个数组中只出现一次的数
#include
using namespace std;
void find(int *arr, int length)
{
for (int i = 0; i < length; i++)
{
int cnt = 0;
for (int j = 0; j < length; j++)
{
if (arr[i] == arr[j])
cnt++;
}
if (cnt == 1)
{
cout << arr[i];
}
}
cout << endl;
}

int main()
{
int arr[] = { 1,5,1 };
int length = sizeof(arr) / sizeof(arr[0]);
for (int k = 0; k < length; k++)
{
cout << arr[k];
}
cout << endl;
find(arr, length);
system(“pause”);
return 0;
}

31.//给出一串数字123456 将偶数位置的数字输出 246
#include
#include
using namespace std;

int main() {
char str1[100], result[100] = {0};
int cnt = 0;
cout << “输入一字符串” << endl;
cin.getline(str1, 100);
for (int k = 0; str1[k] != ‘\0’; k++)
{
if (int(str1[k]-‘0’) % 2 == 0)
{
result[cnt] = str1[k];
cnt++;
}
}
for (int i = 0; i<strlen(result); i++)
{
cout << result[i];
}
return 0;
}
32.//给出两个时间,求时间间隔
#include
#include
using namespace std;
int main()
{
char a[10]; char b[10];
int hour1, minute1;
int hour2, minute2;
cin.getline(a,10);
cin.getline(b,10);
if (strlen(a) == 3)
{
hour1 = int(a[0] - ‘0’);
minute1= int((a[1] - ‘0’) * 10) + int(a[2] - ‘0’);
}
else
{
hour1 = int((a[0] - ‘0’) * 10) + int(a[1] - ‘0’);
minute1 = int((a[2] - ‘0’) * 10) + int(a[3] - ‘0’);
}

if (strlen(b) == 3)
{
	hour2 = int(b[0] - '0');
	minute2 = int((b[1] - '0') * 10) + int(b[2] - '0');
}
else
{
	hour2 = int((b[0] - '0') * 10) + int(b[1] - '0');
	minute2 = int((b[2] - '0') * 10) + int(b[3] - '0');
}
int ih = hour2 - hour1;
int im = minute2 - minute1;
if (im < 0) {
	im = 60 + im;
	ih--;
}
cout << "时间差是" << ih << "小时 " << im << "分。";
return 0;

}

//把一个数组中的0移动到数组的后面
#include
#include
using namespace std;
int main()
{
int a[] = { 1,5,6,9,0,3,7,0,7,0,4 }, result[] = {0};
int len = sizeof(a)/ sizeof(a[0]);
for (int i = 0; i < len; i++)
{
if (a[i] == 0)
{
for (int j = i; j < len; j++)
{
a[j] = a[j + 1];
}
a[len - 1] = 0;
}
else
{
a[i] = a[i];
}
}
for (int k = 0; k < len; k++)
{
cout << a[k] ;
}
cout << endl;
return 0;
}

34.//数字交换
#include
#include
using namespace std;
int main()
{
int a[] = { 1,5,6,9,0,3,7,0,7,0,4 };
int len = sizeof(a) / sizeof(a[0]);
int i = 0;
int j = len-1;
int temp;
while (i < j)
{
temp = a[i];
a[i] = a[j];
a[j] = temp;
i++;
j–;
}
for (int k = 0; k < len; k++)
{
cout << a[k] ;
}
cout << endl;
return 0;
}
35.//一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
//一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?
#include
#include
using namespace std;
int main(){
float S0 = 100;
float sum = S0,h,t=1;
int n = 10;
if (n == 1)
{
sum = S0;
}
else
{
int i;
for ( i = 2; i < n + 1; i++)
{
t = pow(2, i - 2);
h = S0 / t;
sum = sum + h;
if (i == 10)
cout << "the tenth height is: " << h/4;
}
}
cout << endl;
cout << sum<<endl;
return 0;
}

36.求阶乘的和
#include
#include
using namespace std;
int main(){
int n;
cin >> n;
int len = n;
int sum = 0, temp=1;
for (int i = 1; i <= len; i++)
{
for (int j = 1; j <= len; j++)
{
temp = temp*n;
n = n - 1;
}
sum = sum + temp;
}
cout << sum;
return 0;
}
37.求阶乘的和,去掉字符串末尾的空格,喝汽水问题
//共有1000瓶汽水,每喝完后一瓶得到一个空瓶子,每三个空瓶子又能换1瓶汽水,喝掉以后又得到一个空瓶子,问总共能和多少瓶汽水?
#include
using namespace std;
#include <stdio.h>
int drink_water(int allbottle,int changebottle)
{
int bottle = allbottle;
int empty = allbottle;
while (empty > (changebottle-1)) //你手里的空瓶子数大于2,表明你还可以继续喝
{
bottle += empty / changebottle; //三个空瓶子可以换一瓶汽水
empty = empty / changebottle + empty % changebottle; //空瓶子现在是换了之后的瓶子和剩下的空瓶子之和
}
return bottle;
}
int main()
{
int allbottle = 1000,changebottle=3;
//cin>> allbottle;
cout<<“最多能喝 瓶!\n”<<drink_water(allbottle, changebottle);
system(“pause”);
return 0;
}
38.输入一段话,输出字的个数
#include
#include
using namespace std;
int main(){
char a[100];
cin.getline(a,100);
int numchar=0,numblank=0, numother=0;
int len = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < len; i++)
{
if ((‘a’ <= a[i] && ‘z’ >= a[i]) || (‘A’ <= a[i] && ‘Z’ >= a[i]))
numchar++;
else if (a[i] == ’ ')
numblank++;
else
numother++;
}
cout << numchar<<endl;
cout << numblank << endl;
cout << numother << endl;
return 0;
}
39.非完全平分数的判断
//判断完全平方数
#include
using namespace std;
int main(){
int n;
cin >> n;
if (sqrt(n) == int(sqrt(n)))
cout << “是完全平方数”;
else
cout << “不是完全平方数”;
return 0;
}
40.输入数字并排序
#include
using namespace std;
void Qsort(int a[], int low, int high)
{
if (low >= high)
{
return;
}
int first = low;
int last = high;
int key = a[first];/用字表的第一个记录作为枢轴/

while (first < last)
{
	while (first < last && a[last] >= key)
	{
		--last;
	}

	a[first] = a[last];/*将比第一个小的移到低端*/

	while (first < last && a[first] <= key)
	{
		++first;
	}

	a[last] = a[first];
	/*将比第一个大的移到高端*/
}
a[first] = key;/*枢轴记录到位*/
Qsort(a, low, first - 1);
Qsort(a, first + 1, high);

}

int main()
{
int n=3;
for (int i = 0; i<n; i++)
{
cin >> a[i];
}
Qsort(a, 0, n - 1);

cout << a[0] << " ";
for (int i = 1; i<n; i++)
{
	if (a[i] != a[i - 1])
	{
		cout << a[i] << " ";
	}
}
return 0;

}

41.如果输入一个字母是小写字母将其转换成大写字母
#include
#include
using namespace std;
int main(){
char a[100] = {0};
cin.getline(a,100);
int len = sizeof(a) / sizeof(a[0]);
for (int i = 0; i < len; i++)
{
if ((‘a’ <= a[i] && ‘z’ >= a[i]))
a[i] = a[i] - 32;
}
for (int i = 0; i < len; i++)
{

	cout << a[i] ;
}
return 0;

}
42…比较两个字符串的长度
//比较两个字符串的长度
#include
#include
using namespace std;
int main(){
char a[100] = {0},b[100] = { 0 };
cin.getline(a, 100); cin.getline(b, 100);
int lena = strlen(a);
int lenb = strlen(b);
if (lena > lenb)
cout << “字符串a大于b”;
else if (lena < lenb)
cout << “字符串a小于b”;
else
cout << “字符串a等于b”;
return 0;
}
43.快排 nlog(2)n
快速排序算法是一种基于交换的高效的排序算法,它采用了分治法的思想:
1、从数列中取出一个数作为基准数(枢轴,pivot)。
2、将数组进行划分(partition),将比基准数大的元素都移至枢轴右边,将小于等于基准数的元素都移至枢轴左边。
3、再对左右的子区间重复第二步的划分操作,直至每个子区间只有一个元素。

#include
using namespace std;
void quickSort(int a[], int, int);
int main()
{
int array[] = { 34,65,12,43,67,5,78,10,3,70 }, k;
int len = sizeof(array) / sizeof(int);
cout << “The orginal arrayare:” << endl;
for (k = 0; k<len; k++)
cout << array[k] << “,”;
cout << endl;
quickSort(array, 0, len - 1);
cout << “The sorted arrayare:” << endl;
for (k = 0; k<len; k++)
cout << array[k] << “,”;
cout << endl;
system(“pause”);
return 0;
}

void quickSort(int s[], int l, int r)
{
if (l< r)
{
int i = l, j = r, x = s[l];/用字表的第一个记录作为枢轴/
while (i < j)
{
while (i < j && s[j] >= x) // 从右向左找第一个小于x的数
j–;
if (i < j)
s[i++] = s[j];
while (i < j && s[i]< x) // 从左向右找第一个大于等于x的数
i++;
if (i < j)
s[j–] = s[i];
}
s[i] = x;
quickSort(s, l, i - 1); // 递归调用
quickSort(s, i + 1, r);
}
}
冒泡排序的基本思想:比较相邻的元素,如果反序则交换。通过第一趟排序能找出最大的元素,并使最大的元素移至最后一位,然后通过第二次排序使次大的元素移至倒数第二位,以此类推,直至所有元素有序。O(n2)
#include
using namespace std;

void print(int arr[], int n)
{
for (int j = 0; j<n; j++)
{
cout << arr[j] << " ";
}
cout << endl;
}

void BubbleSort(int arr[], int n)
{
for (int i = 0; i < n - 1; i++)
{
for (int j = 0; j < n - i - 1; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}

int main()
{
int s[10] = { 8,1,9,7,2,4,5,6,10,3 };
cout << “初始序列:”;
print(s, 10);
BubbleSort(s, 10);
cout << “排序结果:”;
print(s, 10);
system(“pause”);
}

发布了3 篇原创文章 · 获赞 21 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Crystal_YS/article/details/103472857