中国大学MOOC-陈越、何钦铭-数据结构-起步能力自测题 1-5自测合集

自测-1 打印沙漏 #include<cstdio>#include<cmath>int main(){ int n,x,i,j,k; char c; scanf("%d %c",&x,&c); n=sqrt(2.0*(x+1))-1; if(n%2==0) n--; int acw=x-(n+1)*(n+1)/2+1; /...
摘要由CSDN通过智能技术生成
自测-1打印沙漏
#include<cstdio>
#include<cmath>
int main(){
	int n,x,i,j,k;
	char c;
	scanf("%d %c",&x,&c);
	n=sqrt(2.0*(x+1))-1;

	if(n%2==0) n--;
		int acw=x-(n+1)*(n+1)/2+1;
	//正三角
	for(i=0;i<(n+1)/2;i++)
	{
		for(j=0;j<i;j++)
		{
			printf(" ");
		}
		for(k=0;k<n-2*i;k++)
		{
			printf("%c",c);
		}
		printf("\n");
	 } 
	 //倒三角
	 for(i=1;i<(n+1)/2;i++) 
	 	{
		for(j=0;j<(n-2*i-1)/2;j++)
		{
			printf(" ");
		}
		for(k=0;k<2*i+1;k++)
		{
			printf("%c",c);
		}
		printf("\n");
	 } 
	 printf("%d",acw);
	return 0;
}
自测-2   素数对猜想
#include<cstdio>
#include<cmath>
bool jud(int a)
{
	if(a<2) return false;
	
	if(a>=2) 
	{
		for(int i=2;i<=sqrt(a);i++)
		{
			if(a%i==0)
			{
				return false;
			}
		}
		return true;
	}
 } 
 
 int main(){
 	int i,N,m=2,count=0;
 	scanf("%d",&N);
 	for(i=2;i<=N;i++)
 	{
 		if(jud(i)){
 			if(i-m==2)
 			{
 				count++;
			 }
			 
			 m=i;
		 }
	 }
	 printf("%d",count);
 	return 0;
 }
自测-3                  数组元素循环右移问题
#include<cstdio>
void ivt(int A[],int a,int b)
{
	int temp;
	for(int i=0;i<(b-a+1)/2;i++)
	{
		temp=A[a+i-1];
		A[a+i-1]=A[b-i-1];
		A[b-i-1]=temp;
	}
 } 
 
 int main(){
 	int N,b,a[120];
 	scanf("%d %d",&N,&b);
 	if(b>N)
 	{
 		b=b%N;
	 }
 		for(int i=0;i<N;i++)
 	{
 		scanf("%d",&a[i]);
	 }
 	ivt(a,1,N);
 	ivt(a,1,b);
 	ivt(a,b+1,N);
printf("%d",a[0]);
for(int i=1;i<N;i++)
{
	printf(" %d",a[i]);
}
 	return 0;
 }
自测-4                     Have Fun with Numbers
#include<stdio.h>
#include<string.h>
int hash1[10]={0};
int hash2[10]={0};

int jud(char a[],int len)
{
	if(a[0]>='5'&&a[0]<='9')
	{
		return 0; //false代表不合格的进位大整数; 
	}
	if(a[0]=='0'&&len!=1)
	{
		return 2;
	}
		if(a[0]=='0'&&len==1)
	{
		return 1;
	}
	if(a[0]>='1'&&a[0]<'5')
	{
		return 1;
	}
}
int main()
{
	char a[25];
	int inta[25],i,len,temp;
	gets(a);
	len=strlen(a);
	/*将字符串数组转化为对应整数,存入变换的整数数组中*/
	for(i=0;i<len;i++)
	{
		inta[i]=a[i]-'0';
		hash1[inta[i]]++;
	}
	/*/检测输出
		for(i=0;i<len;i++)
	{
		printf("%d",inta[i]);
	}
	*/
	//检测变化数组内容的数字出现次数; 
	/**/
//		printf("\n");
//		for(i=0;i<10;i++)
//	{
//		printf("%d ",hash1[i]);
//	}
	/**/
//	printf("\n");
	 int count=0;
	for(i=len-1;i>0;i--)
	{
		temp=inta[i]*2+count;
		if(temp>=10)
		{
			count=1;
		}
		else{
			count=0;
		}
		inta[i]=temp%10;
	}
	inta[0]=inta[0]*2+count;
	//将变换数组*2

	//判断数组 
if(	jud(a,len)==1)
{

//对*2后的数组中数字出现的次数进行统计;	 
		for(i=0;i<len;i++)
	{
		hash2[inta[i]]++;
	}
//		for(i=0;i<10;i++)
//	{
//		printf("%d ",hash2[i]);
//	}
	
	//比较两hash表是否完全相等
	for(i=0;i<10;i++)
	{
		if(hash1[i]!=hash2[i])
		{
			printf("No\n");
				for(i=0;i<len;i++)
			{
				printf("%d",inta[i]);
			 }
			return 0;
		}
	}
		printf("Yes\n");
		for(i=0;i<len;i++)
	{
		printf("%d",inta[i]);
	 }
}

else if(jud(a,len)==2)
{		
		printf("No\n");
		for(i=0;i<len;i++)
		{
			printf("%d",inta[i]);
		}
}
else
{
	printf("No\n");
			for(i=0;i<len;i++)
		{
			printf("%d",inta[i]);
		}
}
	
	
	return 0;
 } 

 

自测                Shuffling Machine

 

#include<stdio.h>
//#define P 54
int main()
{
	char color[5]={'S','H','C','D','J'};			//color为花色数组 ; 
	int P=54;										//本题建议使用int 写死P的数值;define定义P值,会使程序整体运行时间变长  define 384ms  int 256ms 
	int start[P],end[P],operate[P];					//start为初始卡牌数组;end为操作后卡牌数组;operate为操作次序数组 ; 
	int K,i;
		for(i=0;i<P;i++)							//初始化填充start数组 ; 
		{
			start[i]=i+1;
		}

		scanf("%d",&K);								//输入变化的次数 

				for(i=0;i<P;i++) 					//输入操作变化的数组 
			{
				scanf("%d",&operate[i]);
			}	
		/*****************数据检查*********************
				for(i=0;i<P;i++)
			{										//输出初始化的start[i]数组,检查是否初始化正确。运行时注释掉本段; 
			printf("%d ",start[i]);
			}										
				for(i=1;i<=P;i++)					//运行时注释掉本段 
			{
				printf("%d ",operate[i]);
			}
		/**********************************************/
		
		
/***********************************主要函数***************************************/		

	for(int step = 0;step < K; step++)  			//执行K次操作——对start数组进行修改的次数 ; 
	{
		for(i=0;i<P;i++)
		{
			end[operate[i]-1]=start[i];				//根据operate数组的指令交换指定位置的start与end; 
		}
		for(i=0;i<P;i++)
		{
			start[i]=end[i];    					//再次交换start与end数组,使start数组成为进行了1次位置变化的数组,方便进行后续操作;	
		} 
	}
		for(i=0;i<P;i++)
	{
		start[i]--;
		if(i!=0)printf(" ");
		printf("%c%d",color[start[i]/13],start[i]%13+1);	
	}
/**********************************************************************************/			
 	return 0;
 } 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值