Məlumatların saxlanılması üçün map<int, int> m strukturunu müəyyən edək, bu struktur i \cdot j hasilatının neçə dəfə təkrarlanmasını sayacaq. Unikal hasilatların sayı xəritəsinin ölçüsünə bərabərdir.
Nümunə
İkinci nümunəni nəzərdən keçirək. [2; 4] \times [2; 5] matrisa üçün vurma cədvəlini yazaq.
Cədvəldə fərqli qiymət var.
Alqoritmin reallaşdırılması
Məlumatların saxlanılması üçün strukturu müəyyən edək.
map<int, int> m;Giriş məlumatlarını oxuyuruq.
scanf("%d %d %d %d",&a,&b,&c,&d);və , həmçinin və dəyişənlərini yerlərini dəyişək ki, a \le b, c \le d şərtləri yerinə yetirilsin.
if (a > b) swap(a,b);
if (c > d) swap(c,d);Bütün mümkün i \cdot j hasilatlarını yoxlayırıq. Hər bir hasilat üçün xəritədə i \cdot j açarına bağlı olan dəyəri artırırıq.
for(i = a; i <= b; i++)
for(j = c; j <= d; j++)
m[i*j]++;Cavabı çıxışa yazırıq — xəritənin ölçüsünü.
printf("%d\n",m.size());Java reallaşdırılması
import java.util.*;
public class Main
{
public static void main(String[] args)
{
Scanner con = new Scanner(System.in);Giriş məlumatlarını oxuyuruq.
int a = con.nextInt();
int b = con.nextInt();
int c = con.nextInt();
int d = con.nextInt();və , həmçinin və dəyişənlərini yerlərini dəyişək ki, a \le b, c \le d şərtləri yerinə yetirilsin.
if (a > b) {int temp = a; a = b; b = temp;}
if (c > d) {int temp = c; c = d; d = temp;}Məlumatların saxlanılması üçün strukturu müəyyən edək.
Map<Integer,Integer> m = new HashMap<Integer,Integer>();Bütün mümkün i \cdot j hasilatlarını yoxlayırıq.
for(int i = a; i <= b; i++)
for(int j = c; j <= d; j++)
{
int key = i * j;Açarla bağlı olan dəyəri artırırıq. Əgər açarla dəyəri hələ bağlı deyilsə, onu standart olaraq qəbul edirik.
m.put(key, m.getOrDefault(key, 0) + 1);
}Cavabı çıxışa yazırıq — xəritənin ölçüsünü.
System.out.println(m.size());
con.close();
}
}Python reallaşdırılması
Giriş məlumatlarını oxuyuruq.
a, b, c, d = map(int, input().split())Məlumatların saxlanılması üçün lüğəti müəyyən edək.
m = {}və , həmçinin və dəyişənlərini yerlərini dəyişək ki, a \le b, c \le d şərtləri yerinə yetirilsin.
if a > b:
a, b = b, a
if c > d:
c, d = d, cBütün mümkün i \cdot j hasilatlarını yoxlayırıq. Hər bir hasilat üçün lüğətdə i \cdot j açarına bağlı olan dəyəri artırırıq.
for i in range(a, b+1):
for j in range(c, d+1):
key = i * j
m[key] = m.get(key, 0) + 1Cavabı çıxışa yazırıq — lüğətin ölçüsünü.
print(len(m))