首页 > 学院 > 开发设计 > 正文

蓝桥杯——2011 吉大计算机研究生机试真题(节选,2017.2.6)

2019-11-11 05:43:56
字体:
来源:转载
供稿:网友

1. 数字之和

源代码:

#include <stdio.h>int main(){	int n,pown;	int sum1,sum2;	while(scanf("%d",&n)!=EOF)	{		if(n==0)			break;		pown=n*n;		sum1=0,sum2=0;		while(n)		{			sum1+=n%10;			n/=10;		}		while(pown)		{			sum2+=pown%10;			pown/=10;		}		PRintf("%d %d/n",sum1,sum2);	}	return 0;}程序截图:

2. 字符串的反码

源代码:

#include <stdio.h>#include <string.h>#define maxlen 81int main(){	int i;	char str[maxlen];	while(gets(str)!=NULL)                              //需注意字符串中可能含有空格,不能用scanf("%s",str)!=EOF	{		if(strcmp(str,"!")==0)			break;		for(i=0;i<strlen(str);i++)		{			if(str[i]>='A' && str[i]<='Z')				str[i]=155-str[i];			else if(str[i]>='a' && str[i]<='z')				str[i]=219-str[i];		}		puts(str);	}	return 0;}程序截图:

3. 搬水果

【分析】贪心算法,每次找出数组里面最小的两个数组合,用sort排序一次一次求出最小的两个值一定会超时,所以用特殊的选择排序,每次都使数组前两个数最小(只排前两个),测试数组可能很大,其余后面的没必要排序,节省时间。        其中要注意的一点,找出数组中最小值时,只需要统计下标,跳出循环后再让他与首元素进行交换,防止在循环内交换次数过多造成超时!

源代码:

#include <stdio.h>#define maxn 10010int main(){	int i,j,k,n,a[maxn];	int sum,t,x;    while(scanf("%d",&n)!=EOF)    {    	if(n==0)    		break;		for(i=0;i<n;i++)        	scanf("%d",&a[i]);        x=0,sum=0;        while(x<n-1)        {            for(i=x;i<x+2;i++)            {                k=i;                for(j=i+1;j<n;j++)                {                   if(a[k]>a[j])				   		k=j;                //标记最小值                }               t=a[i];                      //在循环外面交换,不需要每次交换,节省了交换时间                a[i]=a[k];               a[k]=t;                     }           a[x+1]=a[x]+a[x+1];           sum+=a[x+1];                x++;       }       printf("%d/n",sum);    }    return 0;}程序截图:


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表