Last active
December 14, 2015 05:44
-
-
Save vanphuong12a2/58eb5085737cad9df1ee to your computer and use it in GitHub Desktop.
Programming challenges
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//The 3n+1 problem | |
#include <iostream> | |
#include <cstdio> | |
using namespace std; | |
int limit = 999999; | |
int len[999999]; | |
int get_cycle_len(long long int n){ | |
int clen = 0; | |
if(n <= limit){ | |
if(len[n-1] != 0) return len[n-1]; | |
if(n%2 == 0) clen = 1 + get_cycle_len(n/2); | |
else clen = 2 + get_cycle_len((n*3 + 1)/2); | |
len[n-1] = clen; | |
} | |
else{ | |
if(n%2 == 0) return 1 + get_cycle_len(n/2); | |
else return 2 + get_cycle_len((n*3 + 1)/2); | |
} | |
return clen; | |
} | |
int get_max(int a, int b){ | |
int max = 1; | |
int tmp; | |
for(int i = a; i <= b; i++){ | |
if((tmp = len[i-1]) > max) max = tmp; | |
} | |
return max; | |
} | |
int main() | |
{ | |
int d1, d2, tmp; | |
int n = 2; | |
len[0] = 1; | |
while(n <= limit){ | |
if(n%2 == 0){ | |
len[n-1] = 1 + len[n/2-1]; | |
n++; | |
} | |
else get_cycle_len(n++); | |
} | |
while ( scanf("%d %d", &d1, &d2) != EOF ) | |
{ | |
if (d1 < d2) cout << d1 << " " << d2 << " " << get_max(d1, d2) << endl; | |
else cout << d1 << " " << d2 << " " << get_max(d2, d1) << endl; | |
} | |
return 0; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//The minesweeper problem | |
#include <iostream> | |
#include <cstdio> | |
#include <string> | |
using namespace std; | |
string to_string(int number){ | |
string number_string = ""; | |
char ones_char; | |
int ones = 0; | |
while(true){ | |
ones = number % 10; | |
switch(ones){ | |
case 0: ones_char = '0'; break; | |
case 1: ones_char = '1'; break; | |
case 2: ones_char = '2'; break; | |
case 3: ones_char = '3'; break; | |
case 4: ones_char = '4'; break; | |
case 5: ones_char = '5'; break; | |
case 6: ones_char = '6'; break; | |
case 7: ones_char = '7'; break; | |
case 8: ones_char = '8'; break; | |
case 9: ones_char = '9'; break; | |
default : ones_char = '0'; | |
} | |
number -= ones; | |
number_string = ones_char + number_string; | |
if(number == 0){ | |
break; | |
} | |
number = number/10; | |
} | |
return number_string; | |
} | |
string process_field(int m, int n, int k){ | |
string res = ""; | |
int arr[m+2][n+2]; | |
char tmp[n]; | |
for(int i =0; i< m+2; i++){ | |
for(int j = 0; j< n+2; j++){ | |
arr[i][j] = 0; | |
} | |
} | |
for(int i =0; i < m; i++){ | |
scanf("%s", &tmp); | |
for(int j = 0; j< n; j++){ | |
if(tmp[j]=='*'){ | |
arr[i+1][j+1] = -10; | |
arr[i][j]++; | |
arr[i][j+1]++; | |
arr[i][j+2]++; | |
arr[i+1][j]++; | |
arr[i+1][j+2]++; | |
arr[i+2][j]++; | |
arr[i+2][j+1]++; | |
arr[i+2][j+2]++; | |
} | |
} | |
} | |
res = "Field #" + to_string(k) + ":\n"; | |
for(int i = 1; i< m+1; i++){ | |
for(int j = 1; j< n+1; j++){ | |
if(arr[i][j] < 0) res += string("*"); | |
else res+= to_string(arr[i][j]); | |
} | |
res += string("\n"); | |
} | |
return res; | |
} | |
int main() | |
{ | |
int m,n; | |
int k = 1; | |
string res = ""; | |
while (true) | |
{ | |
scanf("%d%d", &m, &n); | |
if(m*n == 0) break; | |
if(k!=1) res += string("\n"); | |
res += process_field(m,n, k++); | |
} | |
cout << res; | |
return 0; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//The trip problem | |
#include <iostream> | |
#include <cstdio> | |
#include <math.h> | |
using namespace std; | |
string to_string(int number){ | |
string number_string = ""; | |
char ones_char; | |
int ones = 0; | |
while(true){ | |
ones = number % 10; | |
switch(ones){ | |
case 0: ones_char = '0'; break; | |
case 1: ones_char = '1'; break; | |
case 2: ones_char = '2'; break; | |
case 3: ones_char = '3'; break; | |
case 4: ones_char = '4'; break; | |
case 5: ones_char = '5'; break; | |
case 6: ones_char = '6'; break; | |
case 7: ones_char = '7'; break; | |
case 8: ones_char = '8'; break; | |
case 9: ones_char = '9'; break; | |
default : ones_char = '0'; | |
} | |
number -= ones; | |
number_string = ones_char + number_string; | |
if(number == 0){ | |
break; | |
} | |
number = number/10; | |
} | |
return number_string; | |
} | |
string to_fstring(int number){ | |
int tmp = number%100; | |
if(tmp >=10) return to_string(int(floor(number/100))) + "." + to_string(tmp); | |
else return to_string(int(floor(number/100))) + "." + "0" + to_string(tmp) ; | |
} | |
string process_trip(int n){ | |
int sum = 0; | |
int data[n]; | |
float tmp; | |
for(int i = 0; i < n; i++){ | |
scanf("%f", &tmp); | |
data[i] = round(tmp*100); | |
sum += data[i]; | |
//cout << sum << " " << tmp << " " << data[i] <<endl; | |
} | |
int avg = sum/n; | |
int remain = sum%n; | |
int res = 0; | |
for(int i = 0; i < n; i++){ | |
if(avg >= data[i]) res += avg - data[i]; | |
else if(remain > 0) remain--; | |
} | |
return "$" + to_fstring(res + remain); | |
} | |
int main() | |
{ | |
int n; | |
int k = 1; | |
string res = ""; | |
while (true) | |
{ | |
scanf("%d", &n); | |
if(n == 0) break; | |
res += process_trip(n) + "\n"; | |
} | |
cout << res; | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment