FZU 1550豚の点数



豚の点数
Time Limit:1s
Memory limit:32M
Accepted Submit:175
Total Submit:366
自然数Nを入力します.分母がN以下の既約真分数を増分出力するプログラムを書いてください.Input入力には複数のテストデータが含まれていますので、EOF終了まで処理してください.各セットのデータは、自然数N(1<=N<=160)を含む.Outputはスコアごとに1行ずつ占めます.Sample Input
5
Sample Output
0/1
1/5
1/4
1/3
2/5
1/2
3/5
2/3
3/4
4/5
1/1
Original:ACMシミュレーションのさよなら豚年
 
問題を解く:
もう一度map容器を動かすと、本当にいい感じです.mapコンテナのキーワードは繰り返してはいけないので、約分できるものであればmapには入れません.すでに真点数が残っているし、ループは小さい頃からなので、必ず真点数をmapに保存してから、キーワードに対応する値をstringタイプの点数表示フォーマットに設定します.コードでは文字列を整数変換する方法に注意してください.またN=1の場合の特例に注意.
#pragma warning(disable:4786) #include #include #include #include using namespace std; int main() { int N; string s3=""; char a[160]; char b[160]; memset(a,'/0',10); memset(b,'/0',10); map < double,string > number; map < double,string >::iterator iter; while(cin>>N) { number.insert(map < double, string >::value_type(0.00,"0/1")); if(N!=1) number.insert(map < double, string >::value_type(0.50,"1/2")); number.insert(map < double, string >::value_type(1.00,"1/1")); for(int i=1;i<=1;i<=N;i++){for(int j=1;j<=i;j++){if(i%j==0&&&j!=1)//整除できるのは、真分数continueではない;else{sprintf(a,"%d",j)//////////整型を文字列string s 1(a);sprintf(b,"%d",i);string s 2(b);s 3=s 1+"/"+s 2;number.insert(map::value_type((1.00/i)*j,s 3);}}for (iter = number.begin(); iter != number.end(); iter++) { cout<second<