国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

藍橋杯——2010 吉大計算機研究生機試真題(2017.2.5)

2019-11-14 09:09:00
字體:
來源:轉載
供稿:網友

1. 三角形的邊

源代碼:

#include <stdio.h>void fun(int a,int b,int c){	int min,mid,max;	int t;	if(a>b)		t=a,a=b,b=t;	if(b>c)		t=b,b=c,c=t;	if(a>b)		t=a,a=b,b=t;	min=a,mid=b,max=c;	PRintf("%d/n",min+mid-max);}int main(){	int a,b,c;	while(scanf("%d %d %d",&a,&b,&c)!=EOF)	{		if(a==0)			break;		fun(a,b,c);	}	return 0;}程序截圖:

2. 平方因子

源代碼:

#include <stdio.h>int main(){	int i,n;	int flag;	while(scanf("%d",&n)!=EOF)	{		flag=0;		if(n==0)			break;		for(i=2;i<n;i++)		{			if(n%i==0 && (i*i)%n==0)			{				flag=1;				break;			}		}		if(flag==1)			printf("Yes/n");		else			printf("No/n");	}	return 0;}程序截圖:

3. 排列與二進制

分析:正常的順序應該先求出排列數,再將其轉化成二進制數,之后進行末尾連續0的判斷,但是要注意其中有幾個難點:        ①求排列數的結果是否越界,越界之后用數組是否方便?        ②轉換成二進制也需要存入數組中。        但是根據十進制轉換成二進制的商除法就會發現,不斷除以2,先出現的就是最后二進制從后往前的數(即除2取余)。故要求二進制末尾的連續0的個數,只要看n(n-1)(n-2)……(n-m+1)最多可以整除幾個2即可(利用此方法可以避免可能的數組越界和int型超精度問題)

源代碼:

#include <stdio.h>int main(){	int n,m;	int i,t,num;                          //num記錄排列數后面0的個數 	while(scanf("%d %d",&n,&m)!=EOF)	{		num=0;		if(n==0)			break;		for(i=n-m+1;i<=n;i++)             // n*(n-1)*(n-2)*...*(n-m+1)		{			t=i;			while(t%2==0)                 //除2取余得0時,即為排列數后面的0 			{				num++;				t/=2;                     //除2 			}		}		printf("%d/n",num);	}	return 0;}程序截圖:

4. 怪異的洗牌

源代碼:

#include <stdio.h>#define maxn 1000void Shift(int poker[],int result[],int x,int n)       //移位(數組循環移位問題) {	int i,j=0;	for(i=x;i<n;i++)                                   //將數組第x+1個元素到最后一個元素移到最前面 		result[j++]=poker[i];	for(i=0;i<x;i++)                                   //其余元素置后 		result[j++]=poker[i];}void Flip(int result[],int half)                       //翻轉(數組逆置/逆序輸出問題) {	int i=0,j=half-1;                                  //以下用逆序存儲完成 	int temp;	while(i<j)	{		temp=result[i];		result[i]=result[j];		result[j]=temp;		i++,j--;	}}int main(){	int i,n,k,x; 	int t,half;                                        //t-移位/翻轉操作次數  half-翻轉操作標記 	int poker[maxn],result[maxn]={0};                  //兩數組分別記錄操作前和操作后的牌 	while(scanf("%d %d",&n,&k)!=EOF)	{		if(n==0)			break;		t=0;		for(i=0;i<n;i++)                               //操作前撲克牌賦值 			poker[i]=i+1;		while(t<k)		{			scanf("%d",&x);			Shift(poker,result,x,n);                   //移位操作 結果存入result數組 			if(n%2==0)                                 //確定翻轉操作位置 				half=n/2;			else				half=(n-1)/2;			Flip(result,half);                         //在上述result數組結果基礎上翻轉 			t++;			for(i=0;i<n;i++)              //將一輪操作結束后的結果賦給poker數組(之前因為忽略此步操作WA了,k>1時將會派上大用場:( )				poker[i]=result[i];		}		for(i=0;i<n;i++)                               //k次操作結束后的結果 			printf("%d ",result[i]);		printf("/n");	}	return 0;}程序截圖:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵州省| 秭归县| 天津市| 佛山市| 文山县| 邢台市| 南岸区| 凭祥市| 南康市| 南投县| 韩城市| 泊头市| 宿州市| 灵川县| 蕉岭县| 秭归县| 永安市| 徐水县| 临桂县| 星子县| 雷波县| 荆州市| 习水县| 化德县| 甘洛县| 临湘市| 出国| 乐至县| 东方市| 云南省| 沭阳县| 永嘉县| 政和县| 舞阳县| 北碚区| 苏州市| 南宫市| 冷水江市| 景洪市| 韶山市| 蒙阴县|