كيفية إخراج التسلسل "1 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 ..." في Java؟[مغلق]

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

  •  20-08-2019
  •  | 
  •  

سؤال

أنا حاليًا أبدأ البرمجة باستخدام Java.لقد حاولت ترميز التسلسل الموجود في العنوان كمخرج في Java، لكنني عالق!أنا أقوم بتجربة الدالة for، أي مساعدة مرحب بها ;)

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

المحلول

System.out.println("1 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0");

ولكن بجدية، والناس، وهذا هو أول تمريرة لم تختبر:

for(int i=1; i<100; i++){
    System.out.print("1 ");
    for(int j=0; j<i; j++){
        System.out.print("0 ");
    }
}

وإذا كنت تبحث عن المعلومات الأساسية حول كيفية البدء، وجوجل هو صديقك. على سبيل المثال، في محاولة غوغلينغ ل "لحلقة جافا"، وسوف تحصل على الكثير من الأمثلة الجيدة. أيضا، لمعرفة الأشياء الأساسية في أي لغة، جوجل للبحث عن "<لغة> مرحبا العالم" موثوق للغاية.

نصائح أخرى

لماذا حلقتين؟

(تم التحويل من C#، عفوا عن أي أخطاء في بناء الجملة)

String s = "1 ";
for (int i = 0; i < 5; ++i)
{
  s = s + "0 ";
  System.out.print(s);
}

النقد الذاتي:

  • اثنان من الحلقات (مثل حل مايكل هارين) من شأنه أن ينفي نسخ السلسلة
  • من شأن StringBuffer/StringBuilder أن ينفي نسخ السلسلة

هل يمكن تخزين رقم 10 في متغير، ثم في الطباعة حلقة رقم، اضربها 10 (الذي يلحق صفر لتمثيلها عشري)، وتكرار.

for (int i = 2; i < 64; i <<= 1)
    //System.out.print(Integer.toString(i, 2));
    System.out.print(Integer.toString(i, 2).replaceAll("[01]", "$0 "));

وهذه ليست في الحقيقة مسألة فورس بل التفكير حسابي بدائية جدا. لديك تسلسل يتكون من "1"، وبعد ذلك شيء آخر أن تنمو مع مرور الوقت "، وآخر" 1 "، شيء آخر، وما إلى ذلك يمكنك التفكير في هذه عن اثنين من سلسلة المختلفة التي يتم معشق.

وبالتالي، فإن الهيكل العام يكون شيئا مثل:

while(... infinity?)
{
   System.out.print("1");
   doSomething(); 
}

والآن شيء واضح يرتبط إلى عدد التكرارات ( "مراحل") من حلقة خارجية أو العد من 1، لذلك كنت بحاجة إلى شيء مثل:

int stage=0;
while(...infinity?)
{
   ++stage;
   System.out.print("1");
   for(int i=0; i<stage; ++i) System.out.print("0");
}

إذا كنت تعرف كم عدد دورات عليك أن تذهب من خلال استخدام لحلقة بدلا من الوقت، وزيادة المرحلة من خلال ذلك.

وأم أن المعلم يطلب منك؟ اثنين متداخلة لحلقات سوف تفعل خدعة.

وأو بطريقة أخرى بلغة أخرى (روبي):

4.times {|n| print 10**(n+1)}
for (int i = 1; i < 100000;)
{
    i = i * 10;
    System.out.print(i);              
}

أو

int i = 1;

while (i < 100000)
{
    i = i * 10;
    System.out.print(i);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top