zoukankan      html  css  js  c++  java
  • 上机练习三

    导航:复试上机历年真题,题目未搜集全
    十四: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;
    }
    
    
  • 相关阅读:
    pip不是内部或外部命令也不是可运行的程序或批处理文件的问题
    动态规划 leetcode 343,279,91 & 639. Decode Ways,62,63,198
    动态规划 70.climbing Stairs ,120,64
    (双指针+链表) leetcode 19. Remove Nth Node from End of List,61. Rotate List,143. Reorder List,234. Palindrome Linked List
    建立链表的虚拟头结点 203 Remove Linked List Element,82,147,148,237
    链表 206 Reverse Linked List, 92,86, 328, 2, 445
    (数组,哈希表) 219.Contains Duplicate(2),217 Contain Duplicate, 220(3)
    重装系统
    java常用IO
    端口
  • 原文地址:https://www.cnblogs.com/welan/p/12693547.html
Copyright © 2011-2022 走看看