浦发银行校招题及解答

  • 输入一个数n,计算s=1+(1+2)+(1+2+3)+…+(1+2+3+…+n)

    #include <iostream>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    using namespace std;
    int func_sum(int n);
    int main(int argc, char *argv[]) {
    	int n;
    	cin>>n;
    	if(n<=0)
    	{
    		cout<<"ERROR!!"<<endl;
    		return 0;
    	}
    	int sum = 0; 
    	for(int i=n; i>0; i--)
    	{
    		sum += func_sum(i);
    	} 
    	cout<<"the sum is "<< sum<<endl;
    	return 0;
    }
    int func_sum(int n)
    {
    	int sum = 0;
    	for(int i=0; i<=n; i++)
    	{
    		sum += i;
    	}
    	return sum;
    }
    
  • 100以内的完数

    #include<iostream>
    using namespace std;
    
    int main()
    {
    	cout<<"Please input a number:";
    	int n;
    	cin>>n;
    	for(int i=2; i<=n; i++)
    	{
    		int sum = 0;
    		for(int j=1; j<i; j++)
    		{
    			if(i%j==0)
    				sum+=j;
    		}
    		if(sum==i)
    			cout<<"完数:"<<i<<endl; 
    	}
    	return 0;
    }
    
    
  • 输入一个字符串,输出该字符串中字符的所有组合。
    举个例子,如果输入abc,它的组合有a、ab、abc、b、bc、c

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    // 暴力法 
    int main()
    {
    	cout<<"Enter a string: ";
    	string str;
    	cin>>str;
    	int len = str.length();
    	for(int i=0; i<=len; i++)
    	{
    		for(int j=i; j<=len; j++)
    		{
    			for(int k=i; k<j; k++)
    			{
    				cout<<str[k];				
    			}
    			cout<<endl;
    		}
    	}
    	return 0;
    }
    
  • 输出所有的子字符串

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    #include<vector>
    using namespace std;
     
    void Combination(const char* string, int number, vector<char>& result)//const
     
    {
        if(number == 0)
        {
            vector<char>::iterator iter = result.begin();
            for(; iter < result.end(); ++ iter)
                printf("%c", *iter);
            printf("\n");
            return;
        }
        if(*string == '\0')
     
            return;
        result.push_back(*string);
     
        Combination(string + 1, number - 1, result);
        result.pop_back();
        Combination(string + 1, number, result);
    }
     
    void combination(const char* string)//const
    {
        if(string == NULL)
            return;
        int length = strlen(string);
        vector<char> result;
        for(int i = 1; i <= length; ++ i)
        {
            Combination(string, i, result);
        }
    }
     
    int main()
    {
        const char *str ="abcd";//const
        combination(str);
        getchar();
        return 0;
    }
    
  • 三维数组求对角线上的元素之和

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    // 暴力算法 
    int main()
    {
    	int arr[3][3] = {{1,2,3}, {4,5,6}, {7,8,9}};
    	int row = sizeof(arr)/sizeof(arr[0]);
    	int col = sizeof(arr[0]);
    	int sum = 0;
    	for(int i=0; i<row; i++)
    	{
    		for(int j=0; j<col; j++)
    		{
    			if(i==j)
    			{
    				sum += arr[i][j];
    			}
    		}
    	}
    	cout<<"Sum is "<< sum<<endl;
    	return 0;
    }
    
  • 对于含若干字母和数字的字符串 求其中所有的数字之和

    #include<iostream>
    #include<string>
    #include<bits/stdc++.h>
    using namespace std;
    
    int main()
    {
    	cout<<"Enter string and num: "<<endl;
    	string str;
    	cin>>str;
    	int len = str.length();
    	int sum = 0;
    	for(int i=0; i<len; i++)
    	{
    		if(str[i]<='9' || str[i]>='0')
    			sum += std::stoi(str[i].c_str()); // stoi 只能将char* 转化为 int,string 要使用 .c_str() 转化 
    	}
    	cout<<"the sum is "<<sum;
    	return 0;
    }
    
  • 利用快速排序实现所有奇数在前,偶数在后

    #include<iostream>
    
    using namespace std;
    
    void QuickSort(int arr[], int low, int high)
    {
    	if(high<=low)
    		return;
    	int i = low;
    	int j = high+1;
    	int key = arr[low];
    	// 将比key小的数移到右边,比key大 的数移到左边 
    	while(true)
    	{
    		while(arr[++i]<key)
    		{
    			if(i==high)
    				break;
    		}
    		while(arr[--j]>key)
    		{
    			if(j==low)
    				break;
    		}
    		if(i>=j)
    			break;
    		int temp = arr[i];
    		arr[i] = arr[j];
    		arr[j] = temp;
    	}
    	// key 与 arr[j] 交换 
    	int tmp = arr[low];
    	arr[low] = arr[j];
    	arr[j] = tmp;
    	QuickSort(arr, low, j-1);
    	QuickSort(arr, j+1, high);
    }
    
    int main()
    {
    	int arr[] = {1,6,4,7,2,0,11,54,3,7};
    	int len = sizeof(arr)/sizeof(arr[0])-1;
    	QuickSort(arr, 0, len);
    	for(int i=0; i<len+1; i++)
    	{
    		cout<<arr[i]<<" ";
    	}
    	cout<<endl;
    	for(int i=0; i<len+1; i++)
    	{
    		if(arr[i]%2==1)
    			cout<<arr[i]<<" ";
    	}
    	for(int i=0; i<len+1; i++)
    	{
    		if(arr[i]%2==0)
    			cout<<arr[i]<<" ";
    	}
    	cout<<endl;
    	return 0;
    } 
    
  • 字符串逆序

    #include<iostream>
    #include<string>
    
    using namespace std; 
    
    int main()
    {
    	string str;
    	cout<<"Enter a string:"<<endl;
    	cin>>str;
    	int len = str.length();
    	string res = str;
    	for(int i=len-1; i>=0; i--)
    	{
    		res[len-1-i] = str[i];
    //		char tmp = str[len-1-i];
    //		str[len-1-i] = str[i];
    //		str[i] = tmp;
    	}
    	cout<<"Reversed string: "<< res <<endl;
    	
    	return 0;
    }
    
  • 找出正整数中偶数,并输出相加后的数,要用 long

    输入 5548 输出 12
    
      #include<iostream> 
    
      using namespace std;
      
      int main()
      {
      	cout<<"Enter a number:"<<endl;
      	long number;
      	cin>>number;
      	int sum = 0;
      	while(number !=0)
      	{
      		int yu = number % 10;
      		if(yu%2 == 0)
      			sum += yu;
      		number = number / 10;
      	}
      	cout<<sum<<endl;
      	return 0;
      }
    
  • 输入 n 和 b , 找出 1 到 n 中被 b 整除的个数.
    例:输入 6 3 输出 2

      #include<iostream> 
      
      using namespace std;
      
      int main()
      {
      	cout<<"Enter n: ";
      	int n;
      	cin>>n;
      	cout<<"Enter b: ";
      	int b;
      	cin>>b;
      	int num = 0;
      	for(int i=1; i<=n; i++)
      	{
      		if(i%b == 0)
      			num += 1;
      	}
      	cout<<num<<endl;
      	return 0;
      }
    
  • 爬一个或者两个台阶,输入 1 <= n < 90 的数字为台阶数,以输入 0 作为结束标志,输出n个台阶共有多少种上楼方式

      输入
      1
      2
      3
      4
      0
      输出
      1
      2
      3
      5
    
      #include<iostream> 
      
      using namespace std;
      
      int step(int n)
      {
      	if(n<=2)
      	{
      		return n;
      	}
      	else
      	{
      		return step(n-1)+step(n-2);
      	}
      }
      
      int main()
      {
      	int a[100];
      	cout<<"Enter step number: "<<endl;
      	int count = 0;
      	for(int i=0; i<100; i++)
      	{
      		cin>>a[i];
      		count++;
      		if(a[i] == 0)
      			break;
      	}
      	cout<<"out"<<endl;
      	for(int i=0; i<count-1; i++)
      	{
      		cout<<step(a[i])<<endl;
      	}
      	return 0;
      }
    
  • 判断一个数是不是素数?

      #include<iostream> 
      
      using namespace std;
      
      int main()
      {
      	cout<<"Enter a number: ";
      	int n;
      	cin>>n;
      	bool flag = true;
      	for(int i =2; i<n; i++)
      	{
      		if(n%i == 0)
      		{
      			flag = false;
      			break;
      		}
      	}
      	if(flag)
      	{
      		cout<<"True"<<endl;
      	}
      	else
      		cout<<"False"<<endl;
      	return 0;
      }
    
  • 判断从1990到2010年中的润年?并打印
    能被4整除的大多是闰年,但能被100整除而不能被400整除的年份不是闰年

    #include<iostream> 
    
    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;
    }
    
  • 输入几个单词,将字母变换成另外一组单词输出?如果字母是i,则变换后的字母是26+i-1

    #include<iostream> 
    
    using namespace std;
    
    int main()
    {
    	char a[100];
    	int n= 0;
    	cin.getline(a, 100);
    	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] + 'z';
    	}
    	cout<<a<<endl;
    	return 0;
    }
    
  • N的阶乘

    #include<iostream> 
    
    using namespace std;
    
    int main()
    {
    	int n;
    	cin>>n;
    	int res = 1;
    	for(int i=1; i<=n; i++)
    	{
    		res = res*i;
    	}
    	cout<<res<<endl;
    	return 0;
    }
    
  • 输入十个数,最大数和最后一个数交换,最小数和第一个数交换

    #include<iostream> 
    
    using namespace std;
    
    int main()
    {
    	cout<<"Enter 10 numbers"<<endl;
    	float a[10];
    	for(int i=0; i<10; i++)
    	{
    		cout<<i+1<<":";
    		cin>>a[i] ;
    	}
    	float min = a[0], max = a[0];
    	int min_loc, max_loc;
    	for(int i=0; i<10; i++)
    	{
    		if(a[i]<min)
    		{
    			min = a[i];
    			min_loc = i;
    		}
    		if(a[i]>max)
    		{
    			max = a[i];
    			max_loc = i;
    		}
    	}
    	float tmp = a[max_loc];
    	a[max_loc] = a[9];
    	a[9] = tmp;
    	
    	tmp = a[min_loc];
    	a[min_loc] = a[0];
    	a[0] = tmp;
    	
    	for(int i=0; i<10; i++)
    	{
    		cout<<a[i]<<" ";
    	}
    	cout<<endl;
    	
    	return 0;
    }
    
  • 猴子吃桃子:一只小猴子一天摘了许多桃子,第一天吃了一半,然后忍不住又吃了一个;第二天又吃了一半,再加上一个;后面每天都是这样吃。到第10天的时候,小猴子发现只有一个桃子了。问小猴子第一天共摘了多少个桃子(1534

    #include<iostream> 
    
    using namespace std;
    
    int main()
    {
    	int y = 1;
    	for(int i=1; i<10; i++)
    	{
    		y = (y + 1) * 2 ; 
    	}
    	cout<<y<<endl;
    	
    	return 0;
    }
    
  • A,B两个字符串, 求在第一个字符串出现, 第二个字符串中未出现的, 重复只取第一次出现, 输出字符串

    #include<iostream> 
    
    using namespace std;
    
    int main()
    {
    	char str1[100];
    	char str2[100];
    	cout<<"String1: ";
    	cin.getline(str1, 100);
    	cout<<"String2: ";
    	cin.getline(str2, 100);
    	for(int i=0; str1[i]!='\0'; i++)
    	{
    		for(int j=0; str2[j]!='\0'; j++)
    		{
    			if(str1[i] == str2[j])
    			{
    				cout<<str1[i]<<endl;
    				return 0;
    			}
    		}
    	 } 
    }
    
  • 把字符串中的字符a和A换成c输出

    #include<iostream> 
    
    using namespace std;
    
    int main()
    {
    	char str[100];
    	cout<<"String: ";
    	cin.getline(str, 100);
    	for(int i=0; str[i]!='\0'; i++)
    	{
    		if(str[i]=='a' || str[i]=='A')
    		{
    			str[i] = 'c';
    		}
    	}
    	cout<<str<<endl;
    	return 0;
    }
    
  • 给你年月日,求出是这年的第几天

    #include<iostream> 
    
    using namespace std;
    
    int main()
    {
    	int y, m, d;
    	cout<<"Year: ";
    	cin>>y;
    	cout<<"mouth: ";
    	cin>>m;
    	cout<<"day: ";
    	cin>>d;
    	int day_run[12] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    	int day_ping[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    	int days = 0;
    	// 闰年 or 平年
    	if(y%4==0 && y%100==0 || y%400==0) 
    	{
    		for(int i=1; i<m; i++)
    		{
    			days += day_run[i];
    		}
    		days += d;
    	}
    	else
    	{
    		for(int i=1; i<m; i++)
    		{
    			days += day_ping[i];
    		}
    		days += d;
    	}
    	cout<<"这是今年的第 "<< days <<" 天" <<endl;
    	return 0; 
    }
    
  • 给你两个数,例如23和456,23 * 456=2 * 4 2 * 5 2 * 6 3 * 4 3 * 5 3 * 6,让你实现这个算法

    
    
  • 凯撒密码加密解密,就是给你由大写字母组成的字符串,求出原来的字符串,加密

    #include<iostream> 
    
    using namespace std;
    
    int main()
    {
    	cout<<"Encode string: ";
    	char str[100];
    	cin.getline(str, 100);
    	cout<<"Encode number: ";
    	int n;
    	cin>>n;
    	n = 26-n; // ***** for decode ******
    	for(int i=0; str[i]!='\0'; i++)
    	{
    		if(str[i]<='Z' && str[i]>='A')
    		{
    			str[i] = (str[i]-'A'+n)%26 + 'A';
    		}
    		if(str[i]<='z' && str[i]>='a')
    		{
    			str[i] = (str[i]-'a'+n)%26 + 'a';
    		}
    	}
    	cout<<"decode string: "<<str<<endl;
    	return 0; 
    }
    
  • 输入一个数,例如 4, 计算1+121+12321+1234321

    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char** argv) {
    	cout<<"n: ";
    	int n;
    	cin>>n;
    	long long int number = 0;
    	long long int sum = 0;
    	for(int i=1; i<=n; i++)
    	{
    		for(int j=1; j<=i; j++)
    		{
    			number = number*10 + j;
    		}
    		for(int j=i-1; j>0; j--)
    		{
    			number= number*10 + j;
    		}
    		sum += number;
    		cout<<"number: "<<number<<endl;
    		number = 0;
    	 } 
    	 cout<<"out: "<<sum<<endl;
    	return 0;
    }
    
  • 求字符串的最大公共前缀,例如flower, fly, flight, 输出fl

    #include <iostream>
    #include <string>
    #include<vector> 
    
    using namespace std;
    
    string longestCommonPrfix(vector<string>& strs)
    {
    	string result = "";
    	string str, tmp;
    	int len;
    	if(strs.size()==0)
    		return result;
    	else if(strs.size()==1)
    		return strs[0];
    	else
    	{
    		str = strs[0];
    		for(int i=1; i<strs.size(); i++)
    		{
    			tmp = strs[i];
    			result = "";
    			if(str.length()<tmp.length())
    				len = str.length();
    			else
    				len = tmp.length();
    			for(int j=0; j<len; j++)
    			{
    				if(str[j] == tmp[j])
    					result += str[j];
    				else
    					break;
    			}
    			str = result; // ********* 关键 *********** 
    		}
    		return result;
    	}
    }
    
    
    int main(int argc, char** argv) {
    	vector<string> strs;
    	cout<<"输入字符串,输入\"0\"结束输入" <<endl;
    	string str;
    	while(str!="0")
    	{
    		cin>>str;
    		strs.push_back(str);
    	}
    	strs.pop_back();
    	for(int i=0; i<strs.size(); i++)
    		cout<<strs[i]<<endl;
    	string result = longestCommonPrfix(strs);
    	cout<<"最大公共前缀:" <<result<<endl;
    	return 0;
    }
    
  • 求两个字符串的最长公共子串

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string longestCommonSubstring(string str1, string str2)
    {
    	string substr = "";
    	if(str1.length()==0 || str2.length()==0)
    		return substr;
    	int len1 = str1.length();
    	int len2 = str2.length();
    	int tmp[len1][len2];
    	int max=0;
    	int loc_i, loc_j;
    	for(int i=0; i<len1; i++)
    	{
    		for(int j=0; j<len2; j++)
    		{
    			if(str1[i] == str2[j])
    			{
    				if(i==0 || j==0)
    				{
    					tmp[i][j] = 1;
    				}
    				else
    				{
    					tmp[i][j] = tmp[i-1][j-1] + 1;
    				}
    				if(max<tmp[i][j])
    				{
    					max = tmp[i][j];
    					loc_i = i;
    					loc_j = j;
    				}
    			}
    			else
    				tmp[i][j] = 0;
    		}
    	}
    	for(int i=loc_i-max+1; i<=max; i++)
    	{
    		substr += str1[i];
    	}
    	return substr;	
    }
    
    int main(int argc, char** argv) {
    	string str1, str2;
    	cout<<"string1: ";
    	cin>>str1;
    	cout<<"string2: ";
    	cin>>str2;
    	string substr = longestCommonSubstring(str1, str2);
    	cout<<"longest common sub-string: "<<substr<<endl;
    	return 0;
    }
    
  • 求多个字符串的最长公共子串

    #include <iostream>
    #include <string>
    #include<vector> 
    
    using namespace std;
    
    string longestCommonSubstring(string str1, string str2)
    {
    	string substr = "";
    	if(str1.length()==0 || str2.length()==0)
    		return substr;
    	int len1 = str1.length();
    	int len2 = str2.length();
    	int tmp[len1][len2];
    	int max=0;
    	int loc_i, loc_j;
    	for(int i=0; i<len1; i++)
    	{
    		for(int j=0; j<len2; j++)
    		{
    			if(str1[i] == str2[j])
    			{
    				if(i==0 || j==0)
    				{
    					tmp[i][j] = 1;
    				}
    				else
    				{
    					tmp[i][j] = tmp[i-1][j-1] + 1;
    				}
    				if(max<tmp[i][j])
    				{
    					max = tmp[i][j];
    					loc_i = i;
    					loc_j = j;
    				}
    			}
    			else
    				tmp[i][j] = 0;
    		}
    	}
    	for(int i=loc_i-max+1; i<=max; i++)
    	{
    		substr += str1[i];
    	}
    	return substr;	
    }
    
    int main(int argc, char** argv) {
    	string str;
    	string tmp = "";
    	vector<string> strs;
    	cout<<"输入字符串,输入\"0\"表示结束输入"<<endl; 
    	while(str!="0")
    	{
    		cin>>str;
    		strs.push_back(str);
    	}
    	strs.pop_back();
    	if(strs.size()==0)
    		cout<<"longest common sub-string: "<<tmp<<endl;
    	else if(strs.size()==1)
    		cout<<"longest common sub-string: "<<strs[0]<<endl;
    	else
    	{
    		tmp = strs[0];
    		for(int i=1; i<strs.size(); i++)
    		{
    			tmp = longestCommonSubstring(tmp, strs[i]);
    			cout<<i<<": "<<tmp<<endl;
    		}
    	cout<<"longest common sub-string: "<<tmp<<endl;
    	}
    	return 0;
    }
    
  • 求两个数字的二进制的相同位数的个数

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
    	int n1, n2;
    	cout<<"n1: ";
    	cin>>n1;
    	cout<<"n2: ";
    	cin>>n2;
    	int min = n1;
    	int max = n2;
    	if(n1>n2)
    		min = n2;
    		max = n1;
    	int cnt = 0;
    	while(min!=0)
    	{
    		if(max%2 == min%2)
    			cnt++;
    		min = min/2;
    		max = max/2;
    	}
    	cout<<"这两个数字的二进制的相同位数的个数是"<<cnt<<endl;
    	return 0;
    }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值