Implementación Java de Blue Bridge Cup Buns

Tema: El significado del tema OJ
Inserte la descripción de la imagen aquí
es muy simple, es decir, necesitamos averiguar cuántos números
no podemos inventar. Aquí necesitamos conocer un requisito previo de conocimiento
Expansión euclidiana:
ax + by = c Sea g = gcd (a, b) La ecuación no es una solución si no es un múltiplo de g

  • Entonces, si g no es igual a 1, absolutamente innumerables c hacen que la ecuación sea insoluble. En este caso, genera directamente INF.
    Luego, en otro caso, podemos enumerar directamente. El rango de números es muy pequeño a 100. Por lo tanto, nuestro límite superior de bucle de 10000 es suficiente
    ( 1) que VIS [] matriz para representar estos datos pueden raspar
    el código:
import java.util.*;
public class P7157包子凑数 {
/*
 * 欧几里得扩展
 * ax+by = c  令 g = gcd(a,b) 如果c不是g的倍数 则方程无解
 * 所以如果g不等于1   绝对无数个c使得方程无解
 */
	static int a[] = new int[10001];
	static int vis[] = new int[10010];
	static int n;
	static int gcd(int a,int b){
		return b==0? a:gcd(b,a%b);
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		n = sc.nextInt();
		for(int i = 0;i < n;i++){
			a[i] = sc.nextInt();
			vis[a[i]] = 1; // 这个数目可以表示
		}
		int g = a[0];
		for(int i = 1;i < n;i++)
			g = gcd(g,a[i]);
		if(g != 1){
			System.out.println("INF");
			return;
		}
		for(int i = 0;i < n;i++)
			for(int j = 0;j+a[i] < 10001;j++)
				if(vis[j] == 1) // 如果 j 是可以凑出来的  那么我已有的数组加j肯定能凑出来
					vis[a[i]+j] = 1;
		long ans = 0;
		for(int i = 1;i <= 10000;i++)
			if(vis[i] == 0)
				ans++;
		System.out.println(ans);
	}
}
32 artículos originales publicados · elogiados 5 · visitas 862

Supongo que te gusta

Origin blog.csdn.net/shizhuba/article/details/105301619
Recomendado
Clasificación