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

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

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

2019-11-14 08:54:22
字體:
來源:轉載
供稿:網友

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;}程序截圖:


上一篇:工廠方法模式

下一篇:C#之MySql新增

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 广汉市| 来宾市| 太康县| 繁峙县| 定南县| 宁河县| 临湘市| 昌邑市| 克拉玛依市| 贡觉县| 嘉峪关市| 长岛县| 扎赉特旗| 宁乡县| 襄城县| 如皋市| 乌海市| 长乐市| 襄垣县| 久治县| 西充县| 尚志市| 璧山县| 佛教| 东莞市| 杭锦旗| 清涧县| 邳州市| 伊川县| 牟定县| 青龙| 客服| 游戏| 漳州市| 务川| 荆门市| 怀柔区| 军事| 广河县| 新绛县| 和龙市|