summaryrefslogtreecommitdiff
path: root/average
diff options
context:
space:
mode:
Diffstat (limited to 'average')
-rwxr-xr-xaverage/averagebin0 -> 35696 bytes
-rw-r--r--average/average.cpp119
-rw-r--r--average/average.in8
3 files changed, 127 insertions, 0 deletions
diff --git a/average/average b/average/average
new file mode 100755
index 0000000..557795a
--- /dev/null
+++ b/average/average
Binary files differ
diff --git a/average/average.cpp b/average/average.cpp
new file mode 100644
index 0000000..5627b61
--- /dev/null
+++ b/average/average.cpp
@@ -0,0 +1,119 @@
+#include <iostream>
+#include <cmath>
+#include <iomanip>
+using namespace std;
+
+int find_gcd(int a, int b);
+void printer(int c, int q, int num, int deno);
+
+int main(){
+ int n, cnum=0;
+ cin>>n;
+
+ while(n>0){
+ cnum++;
+ int nm, sum=0;
+ for(int i=0; i<n; i++){
+ cin>>nm;
+ sum += nm;
+ }
+ int gcd;
+ int deno, num, q;
+ if(abs(sum)>=n){
+ if(sum % n == 0){
+ num = sum/n;
+ deno = 0;
+ q = 0;
+ }
+ else{
+ gcd = find_gcd(sum,n);
+ while(gcd != 1){
+ sum /= gcd;
+ n /= gcd;
+ gcd = find_gcd(sum,n);
+ }
+ q = (sum-(sum%n))/n;
+ num = sum%n;
+ deno = n;
+ }
+ }
+ else{ //abs(sum)<n
+ gcd = find_gcd(n,sum);
+ while(gcd != 1){
+ sum /= gcd;
+ n /= gcd;
+ gcd = find_gcd(n,sum);
+ }
+ q = 0;
+ num = sum;
+ deno = n;
+ }
+ printer(cnum, q, num, deno);
+ cin >> n;
+
+ }
+}
+
+void printer(int c, int q, int num, int deno){
+ int dl=0, ql=0, nl=0, x=deno, y=q, z = num;
+ while (x /= 10)
+ dl++;
+ while(y /= 10)
+ ql++;
+ while(z /= 10)
+ nl++;
+ if(deno == 1 || deno == 0){
+ if(num<0)
+ cout<<"Case "<<c<<":\n"<<"- "<<abs(num)<<endl;
+ else
+ cout<<"Case "<<c<<":\n"<<num<<endl;
+ }
+ else if(q == 0){
+ if(num<0 || deno<0){
+ cout<<"Case "<<c<<":\n";
+ for(int k=0;k<dl+2;k++) cout<<" ";
+ cout<<abs(num)<<endl;
+ cout<<"- ";
+ for(int k=0;k<dl+1;k++) cout<<"-";
+ cout<<endl;
+ cout<<" "<<abs(deno)<<endl;
+ }
+ else{
+ cout<<"Case "<<c<<":\n";
+ for(int k=0;k<dl;k++) cout<<" ";
+ cout<<abs(num)<<endl;
+ for(int k=0;k<dl+1;k++) cout<<"-";
+ cout<<endl;
+ cout<<abs(deno)<<endl;
+ }
+ }
+ else{
+ if(num<0 || deno<0){
+ cout<<"Case "<<c<<":\n";
+ for(int k=0;k<dl+2+ql-nl+1;k++) cout<<" ";
+ cout<<abs(num)<<endl;
+ cout<<"- "<<abs(q);
+ for(int k=0;k<dl+1;k++) cout<<"-";
+ cout<<endl;
+ for(int k=0;k<3+ql;k++) cout<<" ";
+ cout<<abs(deno)<<endl;
+ }
+ else{
+ cout<<"Case "<<c<<":\n";
+ for(int k=0;k<dl+1+ql-nl;k++) cout<<" ";
+ cout<<num<<endl;
+ cout<<q;
+ for(int k=0;k<dl+1;k++) cout<<"-";
+ cout<<endl;
+ for(int k=0;k<2+ql-1;k++) cout<<" ";
+ cout<<deno<<endl;
+ }
+ }
+}
+
+int find_gcd(int a, int b){
+ if(b==0)
+ return a;
+ else
+ return find_gcd(b, a % b);
+}
diff --git a/average/average.in b/average/average.in
new file mode 100644
index 0000000..6ae00d8
--- /dev/null
+++ b/average/average.in
@@ -0,0 +1,8 @@
+2 -1 1
+100 4 -1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1
+100 -8 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1 -1 1
+1 -10000
+1 10000
+100 -909 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000 -10000
+100 -99 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
+0