Skip to content

Instantly share code, notes, and snippets.

@nomarlo
Created May 24, 2016 23:36
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nomarlo/f8bdcca1a3cc89e0e051249aad33a1ce to your computer and use it in GitHub Desktop.
Save nomarlo/f8bdcca1a3cc89e0e051249aad33a1ce to your computer and use it in GitHub Desktop.
/**
Los puntos claves son usar gcd para reducir al maximo la fraccion sum/n
Para impresión se puede usar este tip:
c=cifras(n)
char b[50]="% d\n";
b[1]=c+'0';//convertir int to char
printf(b,abs(sum))
Asi se fuerza a ocupar c espacios la impresion del numero sum
**/
#include <iostream>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <cstdio>
using namespace std;
int cifras(int x){
int r=0;
x=abs(x);
for(int i=1;x>=i;i*=10){
r++;
}
return r;
}
int n,sum,e;
int main(){
scanf("%d",&n);
e=1;
while(n){
sum=0;
for(int i=0;i<n;i++){
int aux;
scanf("%d",&aux);
sum+=aux;
}
printf("Case %d:\n",e);
if(abs(sum)%n==0){
if(sum<0)
printf("- ");
printf("%d\n",abs(sum)/n);
}
else if(abs(sum)<n){
int gcd=__gcd(abs(sum),n);
sum/=gcd;
n/=gcd;
int c=cifras(n);
char b[50]="% d\n";
b[1]=c+'0';//convertir int to char
if(sum<0)
printf(" ");
printf(b,abs(sum));
if(sum<0)
printf("- ");
for(int i=0;i<c;i++)
printf("-");
printf("\n");
if(sum<0)
printf(" ");
printf("%d\n",n);
}
else{
int ent=abs(sum/n);
sum%=n;
int gcd=__gcd(abs(sum),n);
sum/=gcd;
n/=gcd;
int c=cifras(n);
char b[50]="% d\n";
b[1]=c+'0';//convertir int to char
int c2=cifras(ent);
if(sum<0)
printf(" ");
for(int i=0;i<c2;i++)
printf(" ");
printf(b,abs(sum));
if(sum<0)
printf("- ");
printf("%d",ent);
for(int i=0;i<c;i++)
printf("-");
printf("\n");
if(sum<0)
printf(" ");
for(int i=0;i<c2;i++)
printf(" ");
printf("%d\n",n);
}
scanf("%d",&n);
e++;
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment