• 上机练习三


    导航:复试上机历年真题,题目未搜集全
    十四:2003 十三:2004
    十二:2005 十一:2006
    十:2007 九:2008
    八:2009 七:2012
    六:2013 五:2014
    四:2015 三:2017
    二:2018 一:2019

    三、2017

    1、统计素数

    题目:
    给定若干个正整数,请判断素数的个数。
    输入数据首先包含一个整数N(1<=N<=100)表示数据的个数,然后是N个大于1小于10000的整数。请判断并输出给定的N个数中素数的个数。

    代码:

    #include<stdio.h>
    
    
    bool isprime(int x)
    {
    	for(int i=2;i<=x/2;i++)
    		if(x%i==0)
    			return false;
    	return true;
    }
    
    
    int main()
    {
    	int n, count, x;
    	count = 0;
    	scanf("%d", &n);	
    	while(n--)
    	{
    		scanf("%d", &x);	
    		if(isprime(x)==true)
    			count++;
    	}
    	
    	printf("
    素数个数为%d个
    ", count);
    	return 0;
     } 
    

    2、绝对素数

    题目:
    绝对素数是指本身是素数,其逆序也是素数的数,例如:107与701是绝对素数。求[m,n]范围之内的所有绝对素数。
    输入两个正整数m和n,其中m<n。
    输入两个正整数m和n,其中m<n。

    代码:

    #include<stdio.h>
    
    
    bool isPrime(int x)//判断是否为素数 
    {
    	for(int i=2;i<=x/2;i++)
    		if(x%i==0)
    			return false;
    	return true;
    }
    
    
    bool isAbsolutePrime(int x)
    {
    	if(isPrime(x)==true)
    	{
    		int y, num, t;
    		int a[10]={0};
    		y=0; num=0;
    		
    		while(x!=0)//将x放置在a数组中 
    		{
    			a[num++] = x%10;
    			x /= 10;
    		}
    		
    		//如果x=123, 则y=321 
    		t=1;
    		while(num>=0)//求y 
    		{
    			y += a[--num]*t;
    			t *= 10;
    		}
    
    		if(isPrime(y)==true)
    			return true;
    	}
    	
    	return false;
    }
    
    int main()
    {
    	int m, n;
    	scanf("%d %d", &m, &n);
    	for(int i=m;i<=n;i++)
    		if(isAbsolutePrime(i))
    			printf("%d
    ", i);
    		
    	
    	return 0;
    }
    

    3、超素数

    题目:
    如果一个数是素数,并且能被分解为C(C>=2)个连续素数的和,则称这个数为“超素数”,请编程判断一个数是否是超素数。
    输入数据仅仅包含一个正整数N(1<N<100000)。
    如果给定的整数N为超素数,请输出yes,否则请输出no。

    代码:

    #include<stdio.h>
    #include<string.h>
    
    
    const int maxn=1001;
    int p[maxn]={0}, prime[maxn]={0};
    int num=0;
    
    
    void primeTable()
    //求1000以内的所有素数,并放在prime[0-num]中 
    {
    	for(int i=2;i<maxn;i++)
    	{
    		if(p[i]==0)//p[i]==0表示i为素数 
    		{
    			prime[num++] = i;//把素数i放入数组prime 
    			for(int j=i*2;j<maxn;j+=i)
    			//如果i为素数,那么i的整数倍,2*i,3*i...都不是素数 
    			{
    				p[j] = 1;// //p[i]==1表示i不是素数 
    			 } 
    		}
    		
    	}
    }
    
    
    bool isPrime(int x)
    //判断一个数是否为素数 
    {
    	for(int i=0;i<num;i++)
    		if(prime[i]==x)
    			return true;
    	return false;
     } 
    
    
    int main()
    {
    	int x;
    	scanf("%d", &x);
    	primeTable();
    	
    	if(isPrime(x)==false)//如果x本身就不是素数,直接返回 
    	{
    		printf("no
    ");
    		return 0;
    	}
    		
    	
    	int k;
    	bool flag=false;
    	for(int i=0;i<num-1;i++)//找到素数prime[i],使得prime[i]>=x,然后x左边的素数才可能满足条件 
    		if(prime[i]<x&&prime[i+1]>=x)
    		{
    			k = i;
    			break;
    		}
    	
    	int a[100]={0};//数组a来存放组成x的素数 
    	int m, sums, t;
    	for(int i=k;i>=0;i--)//从每一个prime[i]往左个移动,看是否满足连续的素数满足和为x 
    	{
    		sums=x;
    		t=i;
    		m=0;
    		while(t>=0&&sums>prime[t])//用sums减掉当前t所指的素数prime[t] 
    		{
    			a[m] = prime[t];
    			sums -= prime[t];
    			t--; m++;
    		}
    		if(t>=0&&prime[t]==sums)//如果恰好找到则返回 
    		{
    			a[m] = prime[t];
    			flag = true;
    			m++;
    			break;
    		}
    		else if(t>=0&&prime[t]>sums)
    			flag=false;
    	}
    	
    	
    	if(flag==false)
    			printf("no
    ");
    	else if(flag==true)
    	{
    		printf("yes: ");
    		sums = 0;
    		for(int i=0;i<m;i++)
    		{
    			printf("%d", a[i]);
    			sums += a[i];
    			if(i!=m-1)
    				printf("+");
    			else
    				printf("=%d
    ", sums);
    		}
    	}
    	
    	return 0;
    }
    

    4、统计元音个数

    题目:
    统计每个元音字母在字符串中出现的次数。
    每组输入数据是一行长度不超过100的字符串。

    代码:

    #include<stdio.h>
    #include<string.h>
    
    int main()
    {
    	char str[100];
    	gets(str);
    	int a[5]={0};
    	for(int i=0;i<strlen(str);i++)
    	{
    		switch(str[i])
    		{
    			case 'a':
    			case 'A':
    				{
    					a[0]++; break;
    				}
    				
    			case 'e':
    			case 'E':
    				{
    					a[1]++; break;
    				}
    				
    			case 'i':
    			case 'I':
    				{
    					a[2]++; break;
    				}
    				
    			case 'o':
    			case 'O':
    				{
    					a[3]++; break;
    				}
    				
    			case 'u':
    			case 'U':
    				{
    					a[4]++; break;
    				}
    		}
    	}
    	
    	printf("%c: %d
    ", 'a', a[0]);
    	printf("%c: %d
    ", 'e', a[1]);
    	printf("%c: %d
    ", 'i', a[2]);
    	printf("%c: %d
    ", 'o', a[3]);
    	printf("%c: %d
    ", 'u', a[4]);
    	
    	
    	return 0;
     } 
    

    5、合法标识符

    题目:
    输入一个字符串,判断其是否是C语言的合法标识符,标识符由字母、下划线、数字这三种类型组成,但开头必须是字母或下划线(不用判断是否和保留字相同)。
    每组输入数据是一个长度不超过50的字符串。
    对于每组输入数据,如果是C的合法标识符,请输出“yes”,否则,输出“no”。

    代码:

    #include<stdio.h>
    #include<string.h>
    
    bool isnum(char ch)
    {
    	if(ch>='0'&&ch<='9')
    		return true;
    	return false;
    }
    
    
    bool isalpha(char ch)
    {
    	if((ch>='a'&&ch<='z')||(ch>='A'&&ch<='Z'))
    		return true;
    	return false;
    }
    
    
    char str[50];
    
    int main()
    {
    	while(gets(str)!=NULL)
    	{
    		int len=strlen(str);
    		bool flag=true;
    		for(int i=0;i<len;i++)
    		{
    			if(i==0&&(isalpha(str[i])==false)&&str[i]!='_')
    			{
    				flag = false;
    				break;
    			}
    			else if((isalpha(str[i])==false)&&str[i]!='_'&&isnum(str[i])==false)
    			{
    				flag = false;
    				break;
    			}
    		}
    		if(flag==true)
    			printf("yes
    ");
    		else if(flag==false)
    			printf("no
    ");
    					
    	}	
    	
    	return 0;
    }
    
    
  • 相关阅读:
    不安装oracle客户端,用plsql连接oracle
    NaviCat Primium远程连接Oracle 11g数据库操作方法
    PLSQL DEVELOPER 使用技巧
    MyEclipse/Eclipse中properties文件中文乱码问题解决
    log4j日志的配置--Debug
    java-jpa-criteriaBuilder使用入门
    使用@CrossOrigin实现跨域请求
    Could not autowire field: private javax.servlet.http.HttpServletRequest
    java高级-泛型<T>和注解封装与使用
    TableView自动上移
  • 原文地址:https://www.cnblogs.com/welan/p/12693547.html
Copyright © 2020-2023  润新知