Java Program to Find the Number of Ways to Write a Number as the Sum of Numbers Smaller than Itself

This is a java program to find the number of ways to write a given number as sum of numbers less than the number itself. We start with the number, number minus one is the next partition and so on, till all one’s are the last partition where we stop.

Here is the source code of the Java Program to Find the Number of Ways to Write a Number as the Sum of Numbers Smaller than Itself. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.

//This is a java program to find the number of ways to write a number as a sum of smaller than the number itself
import java.util.Scanner;
 
public class NumberOf_Unique_Partitions 
{
    public static void print(int[] p, int n, int count) 
    {
        for (int i = 0; i < n; i++)
            System.out.print(p[i] + " ");
        System.out.println();
        int j;
        for (j = 0; j < n; j++) 
        {
            if (p[j] == 1)
                continue;
            else
                break;
        }
        if (j == n)
            System.out
                    .println("The number of ways to write a number as a sum of number smaller than itself is :"
                            + (count - 1));
    }
 
    public static void generateUniquePartition(int n) 
    {
        int[] p = new int[n];
        int k = 0, count = 0;
        p[k] = n;
        while (true) 
        {
            count++;
            print(p, k + 1, count);
            int rem_value = 0;
            while (k >= 0 && p[k] == 1) 
            {
                rem_value += p[k];
                k--;
            }
            if (k < 0)
                return;
 
            p[k]--;
            rem_value++;
 
            while (rem_value > p[k]) 
            {
                p[k + 1] = p[k];
                rem_value -= p[k];
                k++;
            }
            p[k + 1] = rem_value;
            k++;
        }
    }
 
    public static void main(String args[]) 
    {
        System.out.println("Unique Partitioning of a given number");
        System.out.println("Enter the number:");
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        generateUniquePartition(n);
        sc.close();
    }
}

Output:

$ javac NumberOf_Unique_Partitions.java
$ java NumberOf_Unique_Partitions
 
Unique Partitioning of a given number
Enter the number:
6
6 
5 1 
4 2 
4 1 1 
3 3 
3 2 1 
3 1 1 1 
2 2 2 
2 2 1 1 
2 1 1 1 1 
1 1 1 1 1 1 
The number of ways to write as a sum of number smaller than itself is :10

Related posts:

Tìm hiểu cơ chế Lazy Evaluation của Stream trong Java 8
Java Program to Implement HashMap API
SOAP Web service: Upload và Download file sử dụng MTOM trong JAX-WS
How to Change the Default Port in Spring Boot
Java Program to Use the Bellman-Ford Algorithm to Find the Shortest Path
Spring REST API + OAuth2 + Angular
Java Program to Generate All Pairs of Subsets Whose Union Make the Set
Using a List of Values in a JdbcTemplate IN Clause
Inheritance and Composition (Is-a vs Has-a relationship) in Java
Java Program to Implement Fermat Factorization Algorithm
Guide to Spring Cloud Kubernetes
HttpClient Connection Management
Java Program to Compute DFT Coefficients Directly
Java Program to Implement Ternary Heap
Java Program to Implement Sorted Circularly Singly Linked List
How to Use if/else Logic in Java 8 Streams
Sorting Query Results with Spring Data
Concurrent Test Execution in Spring 5
JUnit 5 for Kotlin Developers
Java Program to Implement the RSA Algorithm
Constructor Dependency Injection in Spring
Show Hibernate/JPA SQL Statements from Spring Boot
Java Program to Implement Brent Cycle Algorithm
Java Program to Implement Floyd Cycle Algorithm
Introduction to Spring Data JDBC
Auditing with JPA, Hibernate, and Spring Data JPA
Supplier trong Java 8
Iterating over Enum Values in Java
Java Program to Implement the Edmond’s Algorithm for Maximum Cardinality Matching
Java Program to Implement Dijkstra’s Algorithm using Priority Queue
Java Program to Implement LinkedBlockingDeque API
Apache Commons Collections Bag