ASCII Progress Bar

In this problem, you need to write a code that prints an ASCII progress bar. In each test case, you …

Click here to read the complete problem statement.


If you need help solving this problem, mention your approach and ask specific questions. Please avoid sharing your code and asking the Community to figure out “what’s wrong”.

/*
Why getting WA in the last test case. But I find everything OK. :frowning:
My code:
*/

#include <stdio.h>
#include <math.h>

int main(void)
{
	float rate;
	int near;

	scanf ("%f", &rate);
	near = (int) floor(rate);
	int tm = (int) (rate / 10.0);

	printf ("[");
	for (int i=0; i < tm; ++i){
		printf ("+");
	}
	for (int k=10; k > tm; --k)
		printf (".");
	printf ("] %d%c\n", near, '%');

	return 0;
}

@md_jakariya Try an input like 88.999999.

1 Like

Whst should be the output

The output for 55% should equal to 50%or 60% ?

floor it down to the nearest 10

55% will be treated as 50%.

1 Like
#include<iostream>
using namespace std;

int main()
{
    float f;
    int n;
    cin >> f;
    n = (int)f;

    int floor = n / 10;

    if(floor <= 10)
    {
        cout << "[";
        for(int i=1; i<=10; i++)
        {
            if(i <= floor)
                cout << "+";
            else
                cout << ".";
        }
        cout << "]" << " " << n << "%" << endl;
    }

    return 0;
}

Why I am getting wrong answer?

Try using double f instead of float.

It worked. Thanks!:slightly_smiling_face::slightly_smiling_face::slightly_smiling_face:

1 Like

#include<stdio.h>
int main()
{
printf(“Should I solve it like this?”);
int a;
scanf(“%d”,&a);
int c=a;
printf(“[”);
a=a/10;
int b=10-a;
while(a–){
printf(“+”);
}
while(b–){
printf(“.”);
}
printf(“] %d”,c);
char z=‘%’;
printf(“%c”,z);
return 0;
}

@Burn_Fireblaze looks like you have already solved it.

I’m surprised. Why people are solving it in the complex way?

Many man. many ideas. Thats why.

@hjr265 bro.
as the problem statement says that-- floor it down to the nearest 10 (62 becomes 60, 65 becomes 60, 68 becomes 60 and so on.).

but in input 62.3% have output of 62%.

why?

use double insted of float

Floor it down to nearest 10 to draw the progress bar.

Floor it down to the nearest integer to print the percentage.

x=float(input())
x=int(x)
y=x//10
z=10-y
print('[',end='')
for i in range(10):
	if 1<=y<=10:
		print('+',end='')
		y-=1
	elif 1<=z<=10:
		print('.',end='')
		z-=1
print(']',end='')	
print(x)	

What is the problem here

#include<stdio.h>
void main(){
    float n;
    scanf("%f",&n);
    int a,b,c;
    a=n/1;
    b=a/10;
    c=10-b;
    printf("[");
    for(int i=1;i<=b;i++){
           if(i<=a){
            printf("%c",43);
           }
    }
    for(int i=1;i<=c;i++){
        if(i<=c){
            printf("%c",46);
           }
    }
    printf("] ");
    printf("%d",a);
    printf("%c",37);
}

what’s wrong with my code???

@Mir.252324 Follow these steps.
1.
void main()
^~~~ change the return type to int [This line’s inspired by @hjr265 :grin:]

2. Check the quotes. Change all “ to ".

3. Your code’s giving incorrect output for cases like 52.999999.
Change

to double n

────────────────────

Explanation: double has 2x the precision of float, as the name says. In general, double has 15 decimal digits of precision, while float has 7.

────────────────────

Calculations:

double has 52 mantissa bits + 1 hidden bit: log(253)/log(10) = 15.95 digits

float has 23 mantissa bits + 1 hidden bit: log(224)/log(10) = 7.22 digits

This precision loss could lead to greater truncation errors in cases.

1 Like

You can use static_cast(n) to cut down the decimal portion without rounding the double number

2 Likes