算法题(定义函数求值)

题目

在这里插入图片描述

样例

在这里插入图片描述

解题思路

1、 该题有点难度,但实际上定义一个函数就可以解决问题,还是把数据添加到数组下标中,如果对应数值有数值的话,数组元素就不为0了。
2、 然后我们定义一个find函数,根据题意如果M不存在,那么输出-1,就是K的值大于等于10,一定没有M存在,所以函数可以写如果K>=10 ,return -1;
然后for循环,从输入的n开始循环,这里需要注意的是,最后我们要得到for循环里i的值,所以这里把i保存一下,后面计算用x,还需要注意i要对10取余,所以一开始i的条件应该比题目里的100000多一个0;对10取余看个位上的数是否包含讨厌的数字,这里的判断条件是arr[x%10]==0,如果不等于0,就代表不符合题目要求,继续for循环,直到找到符合条件的数,x!=0是while的一个条件,如果x等于0了,就说明找到了符合条件的数,跳出循环即可,其他条件都是返回-1;
3、 注意在数组中输入下标的格式;下面给出代码。

参考代码

package Test;

import java.util.Scanner;


public class d {
	
	public static int find(int n,int arr[],int k) {
		if(k>=10) {
			return -1;
		}
		for(int i=n;i<1000000;i++) {
			int x=i;
			while(arr[x%10]==0&&x!=0) {
				x/=10;
			}
			if(x==0) {
				return i;
			}
		}
		return -1;
	}
	
	public static void main(String[] args) {
		Scanner sc=new Scanner(System.in);
		int a=sc.nextInt();
		while(a-->0) {
			int n=sc.nextInt();
			int k=sc.nextInt();
			int  arr[]=new int [10];
			for(int i=0;i<k;i++) {
				arr[sc.nextInt()]++;
			}
			int c=find(n, arr, k);
			System.out.println(c);
		}
	}

}


版权声明:本文为qq_44900959原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。