إيجاد الأعداد الصحيحة التي تقبل القسمة على 6 أو 7 ولكن ليس كلاهما

StackOverflow https://stackoverflow.com/questions/1053433

  •  20-08-2019
  •  | 
  •  

سؤال

أحاول كتابة برنامج يعرض الأعداد الصحيحة من 1 إلى 100 القابلة للقسمة على 6 أو 7 لكن ليس كلاهما.

هنا هو الكود الخاص بي:

import acm.program.*;

public class Problem4 extends ConsoleProgram
{
    public void run()
    {
        for (int i = 1; i <= 100; i++)
        {
            boolean num = ((i % 6 == 0) || (i % 7 == 0));

            if (num == true)
            println(i + " is divisible");
        }
    }
}

يعرض الكود أعلاه الإجابات التالية:6,7,12,14,18,21,24,28,30,35,36,42,48,49,54,56,60,63,66,70,72,77,78,84,90,91,96,98

الآن الرقمان العريضان 42 و84 قابلان للقسمة على 6 و7.الآن إذا قمت بتغيير || ل && في الكود أعلاه، تظهر النتيجة 42 و 84 فقط.

ما التغيير الذي يجب علي فعله لإزالة هذين الرقمين من النتيجة النهائية؟

هل كانت مفيدة؟

المحلول

عليك أن تجعل حالتك تبدو كما يلي:

boolean num = (i % 6 == 0 || i % 7 == 0) && !(i % 6 == 0 && i % 7 == 0);

هذا في الأساس تحويل "لكن ليس كلاهما"إلى كود جافا :)

نصائح أخرى

XOR هو الطريق الصحيح.

import acm.program.*;

public class Problem4 extends ConsoleProgram {
  public void run() {
    for (int i = 1; i <= 100; i++) {
      if ( (i % 6 == 0) ^ (i % 7 == 0) ) {
        println(i + " is divisible");
      }
    }
  }
}

أنت بحاجة إلى فحص إضافي لـ "ولكن ليس كليهما".وأعتقد أنه ينبغي أن يكون:

قيمة منطقية = ((i % 6 == 0) || (i % 7 == 0)) && (i % 42 != 0);

يمكنك أيضًا المحاولة

boolean num = ((i % 6 == 0) != (i % 7 == 0));

فكر فيما يعنيه أن تكون قابلاً للقسمة على 6 و 7...الجواب على حياة الكون وكل شيء.

import acm.program.*;

public class Problem4 extends ConsoleProgram
{
    public void run()
    {
        for (int i = 1; i <= 100; i++)
        {
            boolean num = ((i % 6 == 0) || (i % 7 == 0));
            boolean both = ((i % 6 == 0) && (i % 7 == 0));

            if ((num == true) &&  (both == false))
            println(i + " is divisible");
        }
    }
}

إليك مقتطفًا يجب أن يعمل أيضًا - في C++ ولكن قم بالتغيير إلى منطقي ...

int value;
if ((value % 6 == 0 && value % 7 != 0) || (value % 6 != 0 && value % 7 == 0))
    cout << "Is " << value << " divisible by 6 or 7, but not both? true" << endl;
  else
    cout << "Is " << value << " divisible by 6 or 7, but not both? false" << endl;

نسخة مبسطة قليلا

for(int i=1; i<=100; i++) {

            // Either Divisible by 6 or 7 but not both


            if((i%6==0 && i%7!=0) ||( i%7==0 && i%6!=0)) {


                println(i);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top