2014年2月22日 星期六

C++ Functions

深入淺出C++ 第8章 函式

數學天方夜譚:撒米爾的奇幻之旅 p132 三個水手

Generator Function G(n) = 81n-2 的推導

http://www.books.com.tw/products/0010427474

水手分錢(三個水手問題)

/*
g[n]=81n-2
*/
#include <iostream>
using namespace std;
 
int take(int money, int numOfSailor, int remaining){
 if (money%numOfSailor==remaining)
  return (money-remaining)/numOfSailor*(numOfSailor-1);
 else
  return 0;
}
 
int main(){
 int n,m,p,r;
 cin >> n >> m >> p >> r;
 for (int i=n;i<=m;i++){
  int money = i;
 
  for (int j=0;j<=p;j++){  
   if (money) {money=take(money,p,r);}
   else{break;}    
  }
 
  if (money){
   cout << i;
   break;
  }
 }
 system("pause");
 return 0;
}

2014年2月21日 星期五

列出小於或等於n的質數, n<=100

#include <iostream>
using namespace std;
int main(){
 int primes[]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97};
 int n;
 cin >> n;
 for (int i=0;i<25;i++){
  if (primes[i]<=n){
   cout << primes[i] << ' ';
  }
  else{
   break;
  }
 }
 system("pause");
}

IOI

International Olympiad in Informatics
國際資訊奧林匹亞競賽

資訊奧林匹亞賽 宏碁贊助電腦

資訊奧林匹亞賽 宏碁贊助電腦

2014年2月15日 星期六

Pyramid: Luke


Preview (hint: you can copy and paste the preview into Microsoft Word):
#include <iostream>
#include <iomanip>
#include <string>
#include <cmath>
#include <set>
using namespace std;

int main()
{  
	int n;
	cin>>n;
	int size=n*2-1;//正方形邊長
	int *roll;//長
	roll=new int[size];
	int *colomn;//長
	colomn=new int[size];
	int p=1;//roll中的值
	for(int i=0;i<size;i++){//在陣列中存放每一列最大的數(3=>1 2 3 2 1)
		if(i>=n-1){
			roll[i]=p;
			p--;
		}
		if(i<n-1){
		roll[i]=p;
		p++;
		}
	}

	for(int i=0;i<size;i++){//複製
        colomn[i]=roll[i];
	}
    int map[100][100];
	for(int i=0;i<size;i++){
		for(int j=0;j<size;j++){
			map[i][j]=roll[i];
		}
	}
	for(int i=0;i<size;i++){
		for(int j=0;j<size;j++){
			if(map[i][j]>colomn[j]){
				map[i][j]=colomn[j];
			}
		}
	}
	for(int i=0;i<size;i++){
		for(int j=0;j<size;j++){
			cout<<map[i][j];
		}
		cout<<endl;
	}
		
system("Pause");
}

Pyramid

Sample Input
4

Sampel Output
1 1 1 1 1 1 1 
1 2 2 2 2 2 1 
1 2 3 3 3 2 1 
1 2 3 4 3 2 1 
1 2 3 3 3 2 1 
1 2 2 2 2 2 1 
1 1 1 1 1 1 1 


#include <iostream>
#include <cmath>
using namespace std;
int f(int i,int j,int N){
    return min(i<=N?i:N-abs(N-i),j<=N?j:N-abs(N-j));
}
int main(int argc, const char * argv[])
{
    int N;
    cin >> N;
    int M =N*2;
    for(int i=1;i<M;i++){
        for (int j=1;j<M;j++){
            cout << f(i,j,N) << ' ';
        }
        cout<< endl;
    }
    return 0;
}




#include <iostream>
#include <cmath>
using namespace std;
int f(int i,int j,int N){
    return min(i<N?i:N-abs(N-i),j<N?j:N-abs(N-j));
}
int main(int argc, const char * argv[])
{
    int N;
    cin >> N;
    int M =N*2;
    for(int i=1;i<M;i++){
        for (int j=1;j<M;j++){
            cout << f(i,j,N) << ' ';
        }
        cout<< endl;
    }
    return 0;
}