Районная олимпиада по информатике. 2018-2019 учебный год. 8-11 классы
Задача A. Крутой подарок
У Темирлана недавно был день рождения. Из его друзей самый оригинальный подарок решил сделать его друг, Айсултан. Айсултан знает, что Темирлан любит крутые числа. Число называется крутым, если оно является квадратом целого числа. Например, $0$, $9$, $121$ — крутые числа; а $50$, $3$, $12$ — не крутые числа. В распоряжении Айсултана есть последовательность из $n$ целых чисел — $a_1, a_2, a_3, ..., a_n$. Чтобы сообразить подарок, Айсултан берет два числа из этой последовательности $a_j$ и $a_i$ таких, что $j < i$ и если число $a_j * a_i$ является крутым, то он подарит произведение этих двух чисел Темирлану. Помогите понять Айсултану, сколькими способами он может это сделать. Формально, найдите количество пар чисел $(a_j, a_i)$ таких, что $j < i$ и произведение $a_j * a_i$ является крутым числом.
4 1 0 1 1Ответ
6Вход
2 -8 -2Ответ
1Вход
3 1 16 4Ответ
3Вход
1 0Ответ
0
- $0 \le a_i \le 1$ для всех $1 \le i \le n$.
- $n = 2$, $-1000 \le a_i \le 1000$.
- Ограничения из условия.
Комментарий/решение:
#include <bits/stdc++.h>
using namespace std;
int n, num[10005];//size, array
int k;//create counter
int main() {
cin >> n;
for (int i = 1; i <= n; i++){
cin >> num[i];
}
for (int i = 1; i <= n; i++) {
for (int j = i + 1; j <= n; j++) {
//check number
if ( num[i]*num[j] >= 0)
if((double) sqrt(num[i]*num[j]) == (int) sqrt(num[i]*num[j])){
k++;//update counter
}
}
}
cout << k;//answer
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,a,counter=0;cin>>n;int mas[2001]={0};float san;
for(int i=0;i<n;i++)
{
scanf("%d",&a);mas[a+1000]++;
}
for(int i=0;i<=2000;i++)
{ if(mas[i]==0)continue;
counter+=(mas[i]-1)*(mas[i])/2;
for(int q=i+1;q<=2001;q++)
{
if(mas[q]==0)continue;
san=sqrt((i-1000)*(q-1000));
if(san==floor(san)&&san==ceil(san)){counter+=mas[i]*mas[q];}
}
}
printf("%d",counter);
}
решение через некий перебор
n = int(input())
arr = list(map(int, input().split()))
cntr = 0
for i in range(n):
for j in range(i+1, n):
if (arr[i] * arr[j])**0.5 % 1 == 0:
cntr += 1
print(cntr)
Возможно, что при неправильном наборе формул, они будут
доредактированы модератором. При этом содержание не будет меняться.