首页 > 其他分享 >PTA-C语言-一维数组-出生年

PTA-C语言-一维数组-出生年

时间:2024-11-12 14:18:16浏览次数:3  
标签:count arr 年份 数字 int PTA C语言 一维 输入

题目:

以上是新浪微博中一奇葩贴:“我出生于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

思路:

取位数(补0)

首先我们需要一个循环,取出输入年份的各个位上的数。最开始声明数组的时候全部预设为0即可;

判断是否符合条件

我们可以设置数组arr[10],来计算各个数出现的次数。然后用嵌套循环来得出结果。外层循环控制j<4用来控制年份的位数,内层循环控制i<10用来遍历0-9得出各个数出现的次数。

然后再设count=0,用循环遍历arr[],若arr[i]>0则count++,代表i这个数出现过。最后得出的count便是题目中要求计算的“年份中不同数字的个数”。

最后再让count做比较即可。若相等则打印,若不相等则再循环。

最外层大循环用来求目标年份

最外层大循环以输入年份为起点,只要不符合条件就自增,直到出现符合条件的年份,即目标年份后。y-k就是题目中的x;而目标年份则需要arr数组输出(为了应对需要补0的情况)

代码

#include<stdio.h>
int main(){
    int y,n,m;
    scanf("%d %d",&y,&n);
    for(int k=y;;k++){
        int arr[4]={0};//用来放y的各个位数
        int arr1[10]={0};//用来计算数量
        //取各个位数
        m=k;
        for(int i=0;i<4;i++){
            arr[i]=m%10;
            m/=10;
            if(m==0){
                break;
            }
        }
        //判断是否符合条件
        int count=0;//计算不同的数
        for(int j=0;j<4;j++){
            for(int i=0;i<10;i++){
                if(arr[j]==i){
                    arr1[i]++;
                }
            }
        }
        for(int i =0;i<10;i++){
            if(arr1[i]>0){
                count++;
            }
        }
        if(n==count){
            printf("%d ",k-y);
            for(int i=3;i>=0;i--) {
                printf("%d",arr[i]);
            }
            break;
        }
    }
    return 0;
}

标签:count,arr,年份,数字,int,PTA,C语言,一维,输入
From: https://blog.csdn.net/2401_87626632/article/details/143712915

相关文章

  • 用c语言来计算素数和
    #include<stdio.h>intisPrime(intnum){  if(num<2){    return0;//小于2的数不是素数  }  for(inti=2;i*i<=num;i++){    if(num%i==0){      return0;    }  }  return1;......
  • 基础数据结构【c语言版】之 “图” 详细讲述
    别忘了请点个赞+收藏+关注支持一下博主喵!!!1. 图的定义和术语1.1图的定义**图(Graph)**是由顶点(Vertex)和边(Edge)组成的一个集合,可以表示顶点之间的关系。通常,图可以表示为G=(V,E)G=(V,E)G=(V,E),其中:VVV是顶点集合,表示图中的所有顶点。EEE是边集合,表示图中顶点之间的连接......
  • C语言设置安全长跳转(setjmp/longjmp)
    #include<stdio.h>#include<stdlib.h>#include<setjmp.h>staticjmp_bufenv;voidd(void){ fprintf(stdout,"%s\n",__func__); fprintf(stdout,"dend\n"); longjmp(env,10);//跳转到设置点}voidc(void){ fprintf(std......
  • 简易的学生信息管理系统制作——C语言实现
    菜单代码#include"head.h"intmain(intargc,constchar*argv[]){ intch,k; //登录注册 while(1) { printf("\t1、注册\n"); printf("\t2、登录\n"); printf("\t0、退出\n"); printf("请输入你的选择:"); scanf(&quo......
  • C语言中“type”的含义
    在C语言中,“type”是指数据类型,它定义了变量可以存储的数据种类以及可以对这些数据执行的操作。C语言提供了一系列基本的数据类型,它们包括但不限于:整型(IntegerTypes):int:用于存储整数。short和long:分别用于存储较短或较长的整数。signed和unsigned:前者可以存储正数和......
  • c语言入门第六天输入函数
    一:字符输入函数a:字符输入函数格式为getchar();b:功能:从键盘输入一字符c:返回值:正常,返回从键盘输入的代码值,出错或结束返回-1d:代码展示输出单一字符2:格式输入函数a:格式:scanf("格式控制符",地址表)b:功能:按指定格式从键盘读入数据,存入地址表指定存储单元中,并按回......
  • 在C语言中用函数求fibonacci(斐波那契)数列前n项的和
    1.功能用函数求fibonacci数列前n项的和。2.说明fibonacci数列为数列的第一项值为1,第二项值也为1,从第三项开始,每一项均为其前面相邻两项的和。3.题目例如:当n=28时,运行结果:832039。请编写sum函数。#include<stdio.h>//函数sum用于计算斐波那契数列前n项的和longsum......
  • 重温c语言之,7天开整,就是随便的写写,第十天
    一:操作符&:按位与----2进制|:按位或----2进制^:按位异或----2进制~:按位取反---2进制&:先上代码,然后解释1#define_CRT_SECURE_NO_WARNINGS23#include<stdio.h>4intmain()5{6inta=3;7intb=-5;8intc=a&......
  • 使用halcon完成一维码、二维码的识别
    图片素材 通过网盘分享的文件:图片5链接:https://pan.baidu.com/s/1r9SG4lZ3ZQ5S-NGVsFx70w?pwd=BFDJ提取码:BFDJ读码一维码创建读码句柄create_bar_code_model([],[],BarCodeHandle)参数一:输入通用参数可以调整条形码模型的名称。参数二:通用参数可以调整条形码......
  • C语言中的数组
    数组在C语言中的应用场景非常非常多,例如:(作者用C语言写过一个三字棋小游戏详情可见链接)https://blog.csdn.net/2401_87984738/article/details/143487668?sharetype=blog&shareId=143487668&sharerefer=APP&sharesource=2401_87984738&sharefrom=link相信你们在学完今天这节数......