จงเขียนโปรแกรม สำหรับการคำนวณผลบวกของเลขจำนวนนับ เลขคี่

| ไอที | Java | 32733

จงเขียนโปรแกรมสำหรับการคำนวณผลบวกของเลขจำนวนนับเลขคี่ (1, 3, 5, 7, … , N) คือ 1 + 3 + 5 + 7 + 9 + …+ N เมื่อ N เป็นค่าเลขคี่ที่รับจากคีย์บอร์ด

ก่อนที่เราจะคำนวณนั้น เราก็ต้องตรวจสอบข้อมูลที่กรอกเข้ามาก่อน นั่นคือ ใช้ while วนจนกว่ากรอกเข้ามาถูกต้อง โดยใช้คำสั่ง
import java.util.Scanner;

public class sumOdd {
    public static void main(String[] args) {
        long num;
        while(true){
            try{
                Scanner in = new Scanner(System.in);
                System.out.print("Input Odd Number : ");
                num = in.nextLong();
                if(num%2 != 0 && num > 0) break;
            }
            catch(Exception e){
                
            }
        }
    }
}
แค่นี้เราก็ได้ตัวแปรชื่อ num ที่เก็บข้อมูลจากการกรอกคีย์บอร์ด ที่เป็นจำนวนคี่ และมีค่ามากกว่า 0 แล้ว

ตัวอย่างการเขียนด้วย while

import java.util.Scanner;

public class sumOdd {
    public static void main(String[] args) {
        long num;
        while(true){
            try{
                Scanner in = new Scanner(System.in);
                System.out.print("Input Odd Number : ");
                num = in.nextLong();
                if(num%2 != 0 && num > 0) break;
            }
            catch(Exception e){
                
            }
        }
        long result = 0;
        long oddnum = 1;
        while(oddnum <= num){
            result += oddnum;
            oddnum += 2;
        }
        System.out.println("Sum Of Odd Number : " + result);
    }
}
จากตัวอยางข้างบนเรารับค่าทางแป้นพิมพ์มาแล้ว แล้วมาเข้าสู่วงวน while โดยกำหนดตัวแปรเริ่มต้น 2 ตัวนั่นคือ result สำหรับเก็บผลลัพธ์ และ oddnum สำหรับเก็บ index ที่เรากำลังทำงานอยู่ จากนั้นในการตรวจสอบ while เราจะวนเมื่อ ค่า oddnum มีค่าน้อยกว่าหรือเท่ากับ num แล้วในวงวนเราก็บวกผลลัพธ์ด้วยค่าปัจจุบันที่ทำงานอยู่ ซึ่งในแต่ละรอบก็จะเพิ่มค่า oddnum ขึ้นทีละ 2

ตัวอย่างการเขียนด้วย do while

import java.util.Scanner;

public class sumOdd {
    public static void main(String[] args) {
        long num;
        while(true){
            try{
                Scanner in = new Scanner(System.in);
                System.out.print("Input Odd Number : ");
                num = in.nextLong();
                if(num%2 != 0 && num > 0) break;
            }
            catch(Exception e){
                
            }
        }
        long result = 0;
        long oddnum = 1;
        do{
            result += oddnum;
            oddnum += 2;
        }
        while(oddnum <= num);
        System.out.println("Sum Of Odd Number : " + result);
    }
}
ตัวอย่างนี้ก็เหมือนกับตัวอย่างข้างบน แค่เปลี่ยน while เป็น do while

ตัวอย่างการเขียนด้วย for

import java.util.Scanner;

public class sumOdd {
    public static void main(String[] args) {
        long num;
        while(true){
            try{
                Scanner in = new Scanner(System.in);
                System.out.print("Input Odd Number : ");
                num = in.nextLong();
                if(num%2 != 0 && num > 0) break;
            }
            catch(Exception e){
                
            }
        }
        long result = 0;
        for(int i = 1; i <= num; i = i+2) {
            result += i;
        }
        System.out.println("Sum Of Odd Number : " + result);
    }
}
ตัวอย่างนี้ขึ้นตอนการเช็คก็เหมือนเดิม แต่ for loop นั้นทำให้ไม่ต้องสร้างตัวแปร oddnum เพราะเราสามารถใช้ index จาก i ได้เลย

ตัวอย่างการเขียนแบบ recursive

import java.util.Scanner;

public class sumOdd {
    public static void main(String[] args) {
        long num;
        while(true){
            try{
                Scanner in = new Scanner(System.in);
                System.out.print("Input Odd Number : ");
                num = in.nextLong();
                if(num%2 != 0 && num > 0) break;
            }
            catch(Exception e){
                
            }
        }
        
        System.out.println("Sum Of Odd Number : " + sumOddNumber(1, num));
    }
    public static long sumOddNumber(long now, long max){
        if(now == max) return now;
        return now + sumOddNumber(now+2, max);
    }
}
ตัวอย่างนี้เป็นการแก้ปัญหาโดยใช้ recursive โดยสร้างฟังก์ชันใหม่ แล้วทำการเรียกซ้ำฟังก์ชันเดิมไปเรื่อย ๆ เมื่อถึงจุดที่ now เท่ากับ max ก็ให้ return ค่า now ออกมา จากนั้นฟังก์ชันที่เคยเรียกจะบวกย้อนกลับไป ข้อควรระวังในการใช้วิธีแบบนี้ คือ ใส่ตัวเลขได้น้อย เพราะว่า จะเกิดปัญหา java.lang.StackOverflowError เนื่องจากการเรียกซ้ำฟังก์ชัน เป็นการเรียกโดยใช้ Stack

ตัวอย่างการหาคำตอบแบบอนุกรมเลขคณิต

import java.util.Scanner;

public class sumOdd {
    public static void main(String[] args) {
        long num;
        while(true){
            try{
                Scanner in = new Scanner(System.in);
                System.out.print("Input Odd Number : ");
                num = in.nextLong();
                if(num%2 != 0 && num > 0) break;
            }
            catch(Exception e){
                
            }
        }
        long n = (num - 1) / 2 + 1;
        System.out.println("Sum Of Odd Number : " + n*(2 + (n-1)*2)/2);
        System.out.println("Sum Of Odd Number : " + n*(1 + num)/2);
    }
}
ตัวอย่างนี้เป็นการแก้ปัญหาโดยนำความรู้ทางอนุกรมเลขคณิตเข้ามาช่วย เป็นวิธีที่ดีที่สุด เนื่องจากไม่ต้องวนลูปอะไรทั้งสิ้น
comments