蓝桥杯——计算机研究生机试真题(2017.2.19)

1. (2012年北京大学计算机研究生机试真题)最简真分数
题目描述:
给出n个正整数,任取两个数分别作为分子和分母组成最简真分数,编程求共有几个这样的组合。
输入:
输入有多组,每组包含n(n<=600)和n个不同的整数,整数大于1且小于等于1000。
当n=0时,程序结束,不需要处理这组数据。
输出:
每行输出最简真分数组合的个数。
样例输入:
7
3 5 7 9 11 13 15

2 4 5
0
样例输出:
17 

2

源代码:

#include 
#include 
#include 
using namespace std;
#define maxn 610
int Judge(int a,int b)                 //最简真分数判断
{
	int p;
	while(b!=0)
	{
		p=a%b;
		a=b;
		b=p;
	}
	if(a>1)
		return 0;
	else
		return 1;
}
int main()
{
	int n,a[maxn];
	int i,j;
	int count;
	while(scanf("%d",&n)!=EOF)
	{
		count=0;
		if(n==0)
			break;
		for(i=0;i
程序截图:

蓝桥杯——计算机研究生机试真题(2017.2.19)_第1张图片

※2. (2007年清华大学计算机研究生机试真题)质因数的个数
题目描述:
求正整数N(N>1)的质因数的个数。
相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
输入:
可能有多组测试数据,每组测试数据的输入是一个正整数N,(1 输出:
对于每组数据,输出N的质因数的个数。
样例输入:
120
样例输出:
5
提示:
注意:1不是N的质因数;若N为质数,N是N的质因数。

源代码:

#include 
#include 
int is_Prime(int n)                       //判断一个数是否是质数(素数) 
{
	int i;
	int flag=1;
	for(i=2;i<=sqrt(n);i++)
	{
		if(n%i==0)
		{
			flag=0;
			break;
		}
	}
	return flag;
}
int main()
{
	int N;
	int i,j,count;
	while(scanf("%d",&N)!=EOF)
	{
		j=sqrt(N);
		count=0;
		for(i=2;i<=j;i++)                 //判断一个质数i是否是N的因数 
		{
			while(N%i==0 && is_Prime(i))  //注意相同的质因数需要重复计算,故放到while循环内 
			{
				count++;
				N/=i;
			}
			if(N==1)                      //while循环结束后N为1,直接跳出;否则找下一个质因数 
				break;
		}
		if(N!=1)                          //以上循环结束后N是质数,表示此时的N也是N的质因数
            count++;
		printf("%d\n",count);
	}
	return 0;
}
程序截图:

蓝桥杯——计算机研究生机试真题(2017.2.19)_第2张图片

3. 回文子串
题目描述:
输入一个字符串,输出该字符串中对称的子字符串的最大长度。
比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
输入:
存在多组数据,每组数据一行字符串,长度不大于100。
输出:
输出回文子串的最大长度。
样例输入:
google
样例输出:
4

源代码:

#include 
#include 
#define maxlen 105
int Judgestr(char str[],int len)           //判断字符串是否是回文串 
{
	int i=0,j=len-1;
	int flag=1;
	while(i
程序截图:

蓝桥杯——计算机研究生机试真题(2017.2.19)_第3张图片

※4. (2002年华中科技大学计算机研究生机试真题)统计单词
题目描述:
编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符。
(凡是以一个或多个空格隔开的部分就为一个单词)
输入:
输入包括1行字符串,以“.”结束,字符串中包含多个单词,单词之间以一个或多个空格隔开。
输出:
可能有多组测试数据,对于每组数据,
输出字符串中每个单词包含的字母的个数。
样例输入:
hello how are you.
样例输出:
5 3 3 3

【分析】需要注意用scanf("%s",str); 或cin>>str; 输入字符串,在没有输入任何字符的时候按空格、回车是不算字符的,如本题输入(   hello   how are      you.)结果是一样的;在字符后面的空格为结束符,即变成(hello'\0' how'\0'are'\0'you.'\0'),只是这样最后一个空格比较难解决,幸好有题中说以'.为结束符,这样就有了界限,根据这个界限来换行,进行下一组输入。

        此外,也可将每个单词包含的字母个数存入一数组,可以比较灵活地实现输出。

源代码:

#include 
#define maxlen 1010
int main()  
{
	char str[maxlen];
	int i,len;
	while(scanf("%s",str)!=EOF)
	{
		len=0;
		for(i=0;str[i]!='\0' && str[i]!='.';i++)
			len++;
		if(str[i]=='.')
			printf("%d\n",len);
		else
			printf("%d ",len);
	} 
	return 0;
}
程序截图:

蓝桥杯——计算机研究生机试真题(2017.2.19)_第4张图片

=====================================我是分割线=====================================

4. 拓展:输入一句话,统计这句话中包含多少个单词

源代码:

#include 
#include 
#define maxlen 1010
int main()  
{  
    char str[maxlen]={'\0'};  
    int i,flag,count=0; 
    while(gets(str)!=NULL)
    {
    	flag=0,count=0;              //flag开始置0可包括输入的第一个字符非空格的情况,意味着已有一个单词 
		for(i=0;i
程序截图:

蓝桥杯——计算机研究生机试真题(2017.2.19)_第5张图片

你可能感兴趣的:(蓝桥杯基础专题)