PAT团体程序设计天梯赛-练习集L1-033 出生年 (15 分)(细节+自定义函数)

本文主要是介绍PAT团体程序设计天梯赛-练习集L1-033 出生年 (15 分)(细节+自定义函数),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以上是新浪微博中一奇葩贴:“我出生于1988年,直到25岁才遇到4个数字都不相同的年份。”也就是说,直到2013年才达到“4个数字都不相同”的要求。本题请你根据要求,自动填充“我出生于y年,直到x岁才遇到n个数字都不相同的年份”这句话。

输入格式:

输入在一行中给出出生年份y和目标年份中不同数字的个数n,其中y在[1, 3000]之间,n可以是2、或3、或4。注意不足4位的年份要在前面补零,例如公元1年被认为是0001年,有2个不同的数字0和1。

输出格式:

根据输入,输出x和能达到要求的年份。数字间以1个空格分隔,行首尾不得有多余空格。年份要按4位输出。注意:所谓“n个数字都不相同”是指不同的数字正好是n个。如“2013”被视为满足“4位数字都不同”的条件,但不被视为满足2位或3位数字不同的条件。

输入样例1:

1988 4

输出样例1:

25 2013

输入样例2:

1 2

输出样例2:

0 0001

 ——————————————————————————————————————————

这道题本身我想用字符串去做的,最后突然想到用int数组+哈希就可以搞定了。

这道题细节有一点——假如输入的年份位数小于1000,例如1这样的情况;开一个int类型的数组,全部初始化为0,这样缺少的位数就可以自动补0了。将每一个位数上的数字利用哈希进行存储,超过1的部分记为重复的位数。

我第一次写的时候太着急没有考虑到小于1000的情况而且逻辑上出了问题),记录wa代码:

#include<bits/stdc++.h>
using namespace std;
int dif(int x,int y)
{int i=0;int cnt=0;int a[5]={0},b[10]={0};while(x){a[i++]=x%10;x/=10;cnt++;}for(i=0;i<cnt;i++)b[a[i]]++;int count=0;for(i=0;i<10;i++){if(b[i]>1)count++;}if(cnt-count==y)return true;elsereturn false;
}
int main()
{int x,y;int age=0;cin>>x>>y;while(1){if(dif(x,y)){printf("%d %04d",age,x);return 0;}else{age++;x++;}}
}

ac代码:

#include<bits/stdc++.h>
using namespace std;
int dif(int x,int y)
{int i=0;int cnt=0;int a[4]={0},b[10]={0};//a[4}存储四位年份数字,//这样做的优点是遇到1这样的特殊情况也可以自动将0算在内 while(x){a[i++]=x%10;//依次读入x/=10;}for(i=0;i<4;i++)//哈希 b[a[i]]++;int count=0;for(i=0;i<10;i++){if(b[i]>1)count+=b[i]-1;//四位数相同的的位数}if(4-count==y)//如果没有相同位数 return true;elsereturn false;
}
int main()
{int x,y;int age=0;cin>>x>>y;while(1){if(dif(x,y)){printf("%d %04d",age,x);//注意年份输出4位 return 0;}elseage++,x++;}
}

这篇关于PAT团体程序设计天梯赛-练习集L1-033 出生年 (15 分)(细节+自定义函数)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/621543

相关文章

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

SpringBoot 自定义消息转换器使用详解

《SpringBoot自定义消息转换器使用详解》本文详细介绍了SpringBoot消息转换器的知识,并通过案例操作演示了如何进行自定义消息转换器的定制开发和使用,感兴趣的朋友一起看看吧... 目录一、前言二、SpringBoot 内容协商介绍2.1 什么是内容协商2.2 内容协商机制深入理解2.2.1 内容

C++11的函数包装器std::function使用示例

《C++11的函数包装器std::function使用示例》C++11引入的std::function是最常用的函数包装器,它可以存储任何可调用对象并提供统一的调用接口,以下是关于函数包装器的详细讲解... 目录一、std::function 的基本用法1. 基本语法二、如何使用 std::function

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用