2014-1 Тест на ментальную арифметику Abacus
Описание задачи
Ментальная арифметика Abacus - это своего рода вычислительная технология, которая выполняет быстрые вычисления, моделируя изменения в счетах в мозге. Тренировка ментальной арифметики Abacus может не только развить интеллект, но и сделать повседневную жизнь более удобной, поэтому она была популяризирована во многих школах.
Учитель счёта и ментальной арифметики в школе применяет метод тестирования, чтобы быстро проверить складывающую способность счёта и ментальной арифметики. Он произвольно сгенерировал набор положительных целых чисел с разными числами в наборе, а затем попросил учеников ответить: сколько чисел в наборе в точности равно сумме двух других (разных) чисел в наборе?
Недавно учитель поставьте несколько тестовых вопросов, пожалуйста, помогите найти ответ.
Есть
две строки ввода . Первая строка содержит целое число n, которое представляет количество положительных целых чисел, заданных в вопросе теста.
Во второй строке n положительных целых чисел, и каждые два положительных целых числа разделены пробелом, чтобы указать положительные целые числа, указанные в контрольных вопросах.
Выходные данные
состоят из одной строки и содержат целое число, которое представляет ответ на вопрос теста.
кейс:
входить | |
---|---|
4 | 1 2 3 4 |
Выход | 2 |
Намекать
[Пример описания] 1 + 2 = 3, 1 + 3 = 4, поэтому ответ, соответствующий требованиям теста, - 2. Обратите внимание, что слагаемое и слагаемое должны быть двумя разными числами в наборе.
【Данные показывают】
Для 100% данных 3≤n≤100, а размер положительного целого числа, указанного в тестовом вопросе, не превышает 10 000.
Анализ мышления В
этом вопросе следует обратить внимание на следующие детали, a + b = c, a! = B, например, 1 + 4 = 5, 2 + 3 = 5, эти два ответа можно рассматривать только как один метод.
- Сначала определите два массива, a [10001], gve [10001] = {0}, массив gov [] используется для обозначения суммы слагаемого и слагаемого, чтобы избежать ситуации, когда один результат соответствует двум значениям. (1 + 4 = 5, 2 + 3 = 5,)
анализ кода
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
Вход управления циклом (простой)
полный код
#include<stdio.h>
int main (){
int a[10001],n,covd=0,gve[10001]={
0},j,i,sum;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&a[i]);
}
//三重循环暴力演算法
for(int i=1;i<=n;i++){
for(j=i+1;j<=n;j++){
for(int k=1;k<=n;k++){
//核心判断语句,判断下标为k的数组元素是否等于下标为i,j数组元素之和,并判断a[i],a[j]是否相等
//且数组gov[k]==0,因为当gov!=0时,证明该值已经存在了。
if(a[k]==a[i]+a[j]&&a[i]!=a[j]&&gve[k]==0){
covd++;//covd计数器
gve[k]=1;//在数组gve中标记k下标下的元素,令它等于1.避免重复
}
}
}
}
printf("%d",covd);
return 0;
}
4
1 2 3 4
2
--------------------------------
Process exited with return value 0
Press any key to continue . . .v
Для этого вопроса я использовал трехцикловое исчисление насилия. Я думаю, что это очень круто, поэтому временная сложность должна быть слишком большой, поэтому я могу продолжить ее оптимизацию.
Тип вопроса несложный, главное - мысль.