寒假集训第一周1.25-1.29

3 篇文章 0 订阅
1 篇文章 0 订阅

寒假集训第一周习题题解(第一弹)

ACM基础+时间复杂度+思维+模拟

D-回文数猜想

在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
/*先写一个函数,把数字的每一位逆向转换到一个数组中,
再将这个数组转换成一个数字,并返回这个数字。*/
int change(int n)
{
    int a[20];
    int k=0;
    while(n!=0)
    {
        k++;
        a[k]=n%10;
        n/=10;
    }    
    int res=0;
    for(int i=1;i<=k;i++)
    {
        res*=10;
        res+=a[i];
    }
    return res;    
} 

int main()
{
    int n,i,cnt,k;
    int result[100];
    while(scanf("%d",&n)!=EOF)
    {	
		k=0;
        cnt=0;
        result[0]=n;
        while(n!=change(n))//如果不是回文数,就将这个数和它的倒序数相加
        {
            n=n+change(n);
            result[++cnt]=n;
            k++;
        }    
        printf("%d\n",k);
        for(i=0;i<cnt;i++)
          printf("%d--->",result[i]);
        printf("%d\n",result[cnt]);
    }    
    return 0;
}

心得体会:
第一次提交的时候,出现了presentation error,原因是在输出每次结果的后面没有一个换行。(哭了

F-买鸡问题

在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
int main(){
	int n;
	int a=0;
	scanf("%d",&n);
	for(int i=0;i<=200;i++){
		for(int j=0;j<=200;j++){
			for(int t=0;t<=200;t++){
				if(i*5+j*3+t==n&&i+j+3*t==n){
					printf("%d %d %d\n",i,j,3*t);
					a=1;
				}
			}
		}
	}
	if(a==0){
		printf("No Answer.\n");
	}
	
	return 0;
}

心得体会:
本题可以使用枚举的暴力方法求解,刚上手时整体思路是对的,但是在“无解”输出“No answer”的情况下出了问题,我一开始把输出“No answer”放在了循环里和输出三个整数互为一个if-else,这就导致了输出多次“No answer”。
所以,增加了一个类似开关的装置int a=0,当有解的情况下将a赋值为1,再在总循环后加判断是否有解。

H-最小新整数

在这里插入图片描述

#include<stdio.h>
#include<string.h>
struct node{
	char s[50];
	int len;
	int k;
}z[100000];
int main(){
	int t,i,len,j,x;
	scanf("%d",&t);
	for(i=0;i<t;i++){
		scanf("%s %d",&z[i].s,&z[i].k);
		z[i].len=strlen(z[i].s);
	}
	for(i=0;i<t;i++){
		
		for(j=0;j<z[i].len-1;j++){
			if(z[i].s[j]-'0'>z[i].s[j+1]-'0'){
				z[i].k--;
				for(x=j;x<z[i].len-1;x++){
					z[i].s[x]=z[i].s[x+1];
				}
				z[i].len--;
				j=-1;
			}	
			if(z[i].k==0){
				break;
			}
		}
		
	}
	for(i=0;i<t;i++){
		for(j=0;j<z[i].len-z[i].k;j++){
				printf("%c",z[i].s[j]);
		}
	    printf("\n");
	}
}

I-赶时间

在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
int main(){
	int h1,m1,s1,h2,m2,s2,a,b,c;
	scanf("%d:%d:%d",&h2,&m2,&s2);
	scanf("%d:%d:%d",&h1,&m1,&s1);
	int x=h2*60*60+m2*60+s2;
	int y=h1*60*60+m1*60+s1;
	printf("%d",x-y);
	
	return 0;
}

心得体会:
其实只要把两次的时间都换算成秒就行了。。。

J-暖气坏了

在这里插入图片描述

#include<stdio.h>
int main(){
	int n,m,a[10000],k=0;
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=0;i<n-1;i++){
		if((a[i+1]-a[i])<m){
			k=a[i+1]-a[i]+k;
		}
		else{
			k+=m;
		}
	}
	printf("%d",k+m );
	return 0;
}

K-完美立方

在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
int vol(int a){
    int	vol=a*a*a;
	return vol;
}
int main(){
	int n;
	scanf("%d",&n);
	int a,b,c,d;
	for(a=2;a<=n;a++){
		for(b=2;b<a;b++){
			for(c=b;c<a;c++){
				for(d=c;d<a;d++){
					if(vol(a)==vol(b)+vol(c)+vol(d)){
						printf("Cube = %d, Triple = (%d,%d,%d)\n",a,b,c,d);
					}
				}
			}
		}
	}
	
	
	return 0;
}

M-母牛的故事

在这里插入图片描述

#include<stdio.h>
int main(){
	int n;
	scanf("%d",&n);
	int a[55]={0,1,2,3,4},i;
	for(i=5;i<=n;i++){
		a[i]=a[i-1]+a[i-3];
	}
	printf("%d",a[n]);
	
	return 0;
} 

心得体会:
找规律就行。
可以先写出前几年的年份及对应的母牛数量,找到规律是:前四年的年份等于母牛数量,之后为本年数量=第前一年+第前三年

O-统计元音

在这里插入图片描述

在这里插入图片描述

#include<stdio.h>
#include<string.h>

int main(){
	int n;
	scanf("%d",&n);
	getchar();//吸收一个换行'\n'
	char s[100];
	int a,e,i,o,u,m,j;
	a=0,e=0,i=0,o=0,u=0;
	for(m=0;m<n;m++){
		gets(s);
		;
	//	printf("%d\n",strlen(num[i].s)); 
		for(j=0;j<strlen(s);j++){
			if(s[j]==10)
				break;
			switch(s[j]){
			case 'a' : a++;continue;
			case 'e' : e++;continue;
			case 'i' : i++;continue;
			case 'o' : o++;continue;
			case 'u' : u++;continue;
			default : continue;
			}
		}
		//printf("%d",j);
		printf("a:%d\ne:%d\ni:%d\no:%d\nu:%d\n",a,e,i,o,u);
		//输出完本次的之后,清零
		a=0,e=0,i=0,o=0,u=0;
		//注意:最后一次输出时后面没有空行
		if(m!=n-1){
		    printf("\n");
		}
	}
	
	
	return 0;
} 

P-求数列的和

在这里插入图片描述

#include<stdio.h>
#include<math.h>
int main()
{
    int m;
    double sum,n;
    while(scanf("%lf%d",&n,&m)!=EOF&&n<10000&&m<1000)
    {
        sum=n;//数列第一项也要加上
        for(int i=1;i<=(m-1);i++)
        {
            n=sqrt(n);
    		sum+=n;
        }
        printf("%.2lf\n",sum);
    }
    return 0;
}

Q-数字游戏在这里插入图片描述

#include<stdio.h>
int main()
{
	char s[10];
	scanf("%s", s);
	int sum=0,a=0;
	for(int i=0;i<9;i++){
		if(s[i]=='1'){
			sum++;
			a=1;
		}
		else{
			continue;
		}
	}
	if(a==0){
	printf("0");	
		}
	else{
			printf("%d",sum);
		}
	return 0;
	
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值