浦发银行机试题

1. 判断是不是IP地址
2. 统计字符串里数字字母空格和其他字符个数四种字符统计。
3. 整数转二进制
#include <stdio.h>
#include<iostream>
using namespace std;
int main()
{
	int n, a, b, c, d;
	scanf("%d", &n);
	while (n--){
		scanf("%d.%d.%d.%d", &a, &b, &c, &d);
		if (a < 0 || b < 0 || c < 0 || d < 0 || a > 255 || b > 255 || c > 255 || d > 255)
			printf("No!
");
		else
			printf("Yes!
");
	}
	system("pause");
	return 0;
}



#include <iostream>

using namespace std;

int main()

{
	
    char c;
	
    int letters = 0, space = 0, digit = 0, others = 0;
	
    while ((c = getchar())!= '
')

	{
		
        if (c >= 'a'&&c <= 'z' || c >= 'A'&&c <= 'Z')
		
	letters++;
		
        else if (c == ' ')
	
         space++;
		
        else if (c >= '0'&&c <= '9')

	 digit++;
		
        else
		
        others++;
	
printf("char=%d space=%d digit=%d others=%d
", letters, space, digit, others);
	
system("pause");
	
return 0;

}



#include <iostream> 
using namespace std;
int main()
{
	int num ;
	cin >> num;
	while(num)
	{
		cout << (num&1);
		num = num >> 1;//把num转换成二进制表示后所有位向后移动一位,高位补0
	}
	cout <<endl;
	system("pause");
	return 0;
}



1.判断输入的字符串是否全是数字
2.3x3矩阵转置
3.判断字符串是否可以由其子串组成

#include <iostream>
#include <sstream> 
using namespace std;
bool isNum(string str)
{
    stringstream sin(str);
    double d;
    char c;
    if (!(sin >> d))
    {
        return false;
    }
    if (sin >> c)
    {
        return false;
    }
    return true;
}
int main(void)
{  
    string str1,str2;
    cin >> str1;
    if (isNum(str1))
    {
        cout << "str1 is a num" << endl;
    }
    else
    {
        cout << "str1 is not a num" << endl;
    }
    system("pause");
    return 0;
}



#include<iostream>
using namespace std;
int main()
{
    int matrix[3][3];
    for (int i = 0; i < 3; i++)
    for (int j = 0; j < 3; j++)
            cin >> matrix[i][j];
 
    printf("原矩阵:
");
    for (int i = 0; i<3; i++){
 
        for (int j = 0; j<3; j++)
 
            cout << matrix[i][j] << " ";
 
        cout << endl;
 
    }
    printf("
转置后矩阵:
");
    for (int i = 0; i<3; i++){
        for (int j = 0; j<3; j++)
            cout << matrix[j][i] << " ";
        cout << endl;
    }
    system("pause");
    return 0;
}



#include<iostream>
#include<string>
using namespace std;
class Solution {
public:
    bool repeated(string s)
    {
        int n = s.size();
        string temp1 = "";
        string temp2 = "";
        for (int i = 2; i <= n; ++i)
        {
            if (n % i == 0)
            {
                int length = n / i;
                temp1 = string(s.begin(), s.begin() + length);
                for (int j = 0; j < i; ++j)
                    temp2 += temp1;
            }
            if (temp2 == s)
                cout << temp1 << endl;
                return true;
             
            temp2 = "";
        }
        return false;
    }
};
int main()
{
    string str;
    cin >> str;
    cout << Solution().repeated(str) << endl;
    system("pause");
    return 0;
}




1、给一组数,问奇数多还是偶数多
2、一串字符,第一个出现一次的字符
3、最长回文子串长度

#include<iostream>
#include<stdio.h>
using namespace std;
int WhichMore(int x[], int n)
{
	int j = 0, o = 0;
	for (int i = 0; i<n; i++)
	if (x[i] % 2 == 0)
		o++;
	else
		j++;
	return o - j;
}
int main()
{
	int x[100], i = 0, j,n;
	cin >> n;
	while (n--){
		cin >> j;
		x[i++] = j;
	}
	j = WhichMore(x, i);
	if (j >= 0)
		printf("偶数比奇数多%d个
", j);
	else
		printf("奇数比偶数多%d个
", -j);
	system("pause");
	return 0;
}



#include<stdio.h>

#include<string.h>

#include<iostream>

int main()

{
	int n, l, sum = 0, i;
	
char a[100000], ch;
	
int sign = 1;
	
scanf("%d
", &n);
	
while (n--)
	{
		
gets(a);
		
l = strlen(a);
		
for (ch = 'a'; ch <= 'z'; ch++)
	
	{
			
for (i = 0; i<l; i++)
			
{
				

if (ch == a[i])
				
	sum++;
			
}
			
if (sum == 1)
		
	{
			

	sign = 0;
			
	break;
			
}
			
sum = 0;  //注意,这里还要局部归零!因为下面的循环都要用sum 
	
	}
		
if (sign == 1)
			
printf("no
");
		
else
			
printf("%c
", ch);
	
	sum = 0;
		
sign = 1;
	
}
	
system("pause");
	
return 0;

}



#include<iostream>
#include<vector>
#include <algorithm>
#include<string>
using namespace std;
class Solution 
{
public:
	string longestPalindrome(string s)
	{
		if (s.length() < 0) 
			return "";//如果长度小于0则返回空
		int n = s.size();//获得字符串的长度
		vector<vector<bool>> dp(n, vector<bool>(n, false));//定义bool向量
		int maxlen = 1, start = 0;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j <= i; j++)
			{
				if (i - j < 2) dp[i][j] = (s[i] == s[j]);
				else
					dp[i][j] = (s[i] == s[j] && dp[i - 1][j + 1] == 1);
				if (dp[i][j] && maxlen < i - j + 1)
				{
					maxlen = i - j + 1;
					start = j;
				}
			}
		}
		return s.substr(start, maxlen);
	}
};
int main() 
{
	        string line;
		cin >> line;
		string ret = Solution().longestPalindrome(line);
		string out = (ret);
		cout << out << endl;
		system("pause");
	        return 0;
}



1.给一个数组,一个target值,求数组中俩元素和为target的俩下标
2.输入一个long类型数字,如365141,输出3-6-5-1-4-1
3.百钱买百鸡的小学问题


#include<iostream>
#include<vector>
#include <unordered_map>
using namespace std;
//构建解决方案
class Solution {
public:
	vector<int> twoSum(vector<int>& nums, int target)
	{
		unordered_map<int, int>m;//因此遇到查找问题,常会考虑一下用unordered_map构造空的容器
		vector<int>result;//定义输出结果向量
		for (int i = 0; i< nums.size(); i++)///* 遍历数组 */
		{
			if (m.find(nums[i]) == m.end())//若这个元素在m中,则判断当前的位置i与查找到的nums[i],得到其位置
			{
				m[target - nums[i]] = i;

			}
			else
			{
				result.push_back(m[nums[i]]);//获得下标值
				result.push_back(i);
				break;
			}
		}
		return result;
	}
};
int main()
{
	int target;
	vector<int>nums;
	cin >> target;
	int x;
	while (cin >> x)
	{
		nums.push_back(x);
		if (getchar() == '
') //遇回车结束
			break;
	}
	vector<int> ret = Solution().twoSum(nums, target);
	cout << ret[0]<<" " << ret[1] << endl;
	system("pause");
	return 0;
}


#include<iostream>
#include <stdio.h>
void main()
{
	long a;
	int b[50], n, i;
	scanf("%ld", &a);
	i = 0;
	while (a>9)
	{
		b[i] = a % 10;
		a /= 10;
		i++;
	}
	b[i] = a;
	for (; i >= 0; i--)
	{
		printf("%d", b[i]);
		if (i != 0)
			printf("-");
	}
	printf("
");
	system("pause");
}


#include<iostream>

using namespace std;

int main()
{
	int x, y, z;              //分别代表公鸡,母鸡,小鸡的数量
	
for (x = 0; x <= 20; x++)
	
{
		
for (y = 0; y <= 33; y++)
	
	{
			
z = 100 - x - y;
			
if (z % 3 == 0 && (5 * x + 3 * y + z / 3) == 100)
	
		{    
				
cout << "公鸡,母鸡,小鸡数:" << x << " " << y << " " << z << " " << endl;
		
	}
	
	}
	
}
	
system("pause");
	
return 0;

}

  

原文地址:https://www.cnblogs.com/277223178dudu/p/11373958.html