Случай 3: если n кратно 3 и 5 - PullRequest
0 голосов
/ 26 мая 2020

Я не могу найти строку записи для третьего случая. Я новичок в мире программирования. Очень признателен, если кто-то помог мне с этим. Заранее спасибо!

#include <stdio.h>
int main()
{
    int n;

    scanf("%d",&n);

    if(n%3==0) {
      printf("\n 1");}
    else if(n%5==0){
      printf("\n 2");}
    else if((n%3==0) && (n%5==0)){
      printf("\n 3");}
    else{
      printf("\n 4");
    }

    return 0;
}

Ответы [ 4 ]

1 голос
/ 26 мая 2020

Измените порядок вашего теста. Если вы сначала поместите самый длинный регистр, тогда, если и n% 3, и n% 5 == 0, он будет напечатан. В противном случае это может быть одно или другое.

if (n%3 == 0 && n%5 == 0)
{ 
   printf("\n 3"); // You might want this to be printf("3\n"); instead
}
else if... // other cases.

Другой способ сделать это, если вы действительно хотите сохранить порядок, - это проверить на отдельных случаях, что оба они не верны, ie :

if (n%3 == 0 && n%5 != 0)
{
   // Only a multiple of 3
}
else if (n%5 == 0 && n%3 != 0)
{
   // Only a multiple of 5
}
else if (n%3 == 0 && n%5 == 0)
{
  // Multiple of 3 and 5
}
1 голос
/ 26 мая 2020

3. Условие проверки, else if ((n % 3 == 0) && (n % 5 == 0)), никогда не будет истинным, потому что если n % 3 == 0, то 1. проверка, if (n % 3 == 0), поймает его раньше. То же самое касается случая, если n % 5 == 0 с тестом 2. else if (n % 5 == 0).

Вместо этого вам нужно поместить if ((n % 3 == 0) && (n % 5 == 0)) в начале, чтобы проверить оба подвыражения перед тестированием для каждого под- выражение:

scanf("%d",&n);

if ((n % 3 == 0) && (n % 5 == 0)) {
  printf("\n 1");
}
else if (n % 5 == 0) {
  printf("\n 2");
}
else if (n % 3 == 0) {
  printf("\n 3");
}
else {
  printf("\n 4");
}
1 голос
/ 26 мая 2020

Сначала вы проверяете, можно ли разделить число на 3, затем вы проверяете, можно ли его разделить на 5, а затем можно ли его разделить на оба.

Можно ли разделить на оба (в другими словами, его можно разделить на 15), затем его можно разделить на 3, поэтому вы выйдете из первого l oop и напечатаете «\ n 1».

0 голосов
/ 26 мая 2020

Я не могу найти строку записи для третьего случая.

else if((n%3==0) && (n%5==0))

3-я строка никогда не верна, поскольку первая if(n%3==0) также была бы верной, и код был бы выполнил этот блок.


Упростить с помощью

//         v------v                 1 for multiple of 3              
//                        v------v  2 for multiple of 5
int m15 = (n%3 == 0)*1 + (n%5 == 0)*2;
if (m15 == 0) m15 = 4;
printf("\n %d", m15);`
...