Блог пользователя Michail

Автор Michail, 12 лет назад, По-русски
#include <iostream>
using namespace std;
int main () {
  int j=0;
  int a[4];
  for (int i=1000; i<9999; i++)
 {
   a[1]=i/1000;
   a[2]=i/100%10;
   a[3]=i/10%10;
   a[4]=i%10;   
  if ((!(a[3]/a[4]))  && (!(a[1]/a[2]))) j++;
 }
cout<<j;  
  return 0;
}

Задача с прошедшей всероссийской олимпиады по математике. Написал программу, дабы проверить, верный ли я ответ получил днём на самой олимпиаде. А компилить не хочет.. кто знает на каком основании?) Сама задача выглядит так: Сколько существует четырёхзначных чисел, у котрых цифра десятков получается из цифры единиц, умноженной на целок число, а цифра тысяч получается из цифры сотен, умноженной на целое число?) Знающие люди, помогите пожалуйста =)

  • Проголосовать: нравится
  • -16
  • Проголосовать: не нравится

»
12 лет назад, # |
  Проголосовать: нравится +10 Проголосовать: не нравится
  1. Массив из 4 элементов имеет индексы от 0 до 3
  2. Перебирать надо до 9999 включительно
  3. При определении правильности числа надо использовать остаток от деления, а не деление
  4. А еще при вычислении остатка от деления надо проверять, что делим не на 0
  5. Программа прекрасно компилируется любым компилятором, неплохо бы понять, чем отличается Compilation error и Runtime error
»
12 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

Во-первых у вас неправильно указан размер массива, вместо a[4], должно быть a[5]. (нумерация в си с нуля, так что массив будет в вашем случае от 0..3)

Во-вторых у вас совершенно неправильный if, надо смотреть не целую часть от деления, а остаток от деления + проверить, не является ли цифра нулем.

#include <iostream>
using namespace std;
int main () {
  int j=0;
  int a[5];
  for (int i=1000; i<=9999; i++)
 {
   a[1]=i/1000;
   a[2]=i/100%10;
   a[3]=i/10%10;
   a[4]=i%10;
   if ((a[4]!=0 && (a[3]%a[4]==0))  && ( a[2]!=0 && (a[1]%a[2]==0)) ) j++;
 }
cout<<j;
  return 0;
}