Районная олимпиада по информатике. 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)
Возможно, что при неправильном наборе формул, они будут
доредактированы модератором. При этом содержание не будет меняться.