Skip to content

Instantly share code, notes, and snippets.

@vanphuong12a2
Last active December 14, 2015 05:44
Show Gist options
  • Save vanphuong12a2/58eb5085737cad9df1ee to your computer and use it in GitHub Desktop.
Save vanphuong12a2/58eb5085737cad9df1ee to your computer and use it in GitHub Desktop.
Programming challenges
//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;
}
//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;
}
//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