清華大学の2001年の再試験の上で機械の問題の第1セットの解題の報告


九度OJ題目1062:セグメント関数
時間制限:1秒メモリ制限:32メガ特殊判題:No提出:397解決:223
タイトルの説明:
次のセグメント関数y=f(x)の値を計算するプログラムを作成します.
    y=-x+2.5; 0<=x<2
    y=2-1.5(x-3)(x-3); 2<=x<4
    y=x/2-1.5; 4<=x<6
入力:
浮動小数点数N
出力:
テストデータは複数のグループがあり、各グループのデータに対して、
Nに対応するセグメント関数値:f(N)を出力します.結果3 D小数点以下を保持
サンプル入力:
    1
サンプル出力:
    1.500
// 2001: 1062: 
// , y=f(x) 。
//y=-x+2.5; 0<=x<2
//y=2-1.5(x-3)(x-3); 2<=x<4
//y=x/2-1.5; 4<=x<6
#include <iostream>
using namespace std;

int main()
{
	int i, j, t;
	float n;
	while( cin >> n ){
		cout.setf(ios::fixed);
		cout.precision(3);
		if( n<2 )
			cout << 2.5-n << endl;
		else if( n<4 )
			cout << 2-1.5*(n-3)*(n-3) << endl;
		else
			cout << n/2-1.5 << endl;
	}
	//system("pause");
	return 0;
}

九度OJ題目1063:整数和
時間制限:1秒メモリ制限:32メガ特殊判定:No提出:349解決:244
タイトルの説明:
プログラムを作成し、整数Nを読み込む.
Nが負でない場合、Nから2 Nの間の整数和を計算する.
Nが1つの負数ならば、2 NからNの間の整数の和を求めます
入力:
1つの整数N、Nの絶対値は1000以下である
出力:
テストデータは複数のグループがあり、各グループのデータに対して、
問題要求の値を出力
サンプル入力:
    1
    -1
サンプル出力:
    3
    -3
// 2001: 1063: 
// , N (N<=1000)
// N , N 2N 
// N , 2N N 
#include <iostream>
using namespace std;

int main()
{
	int i, j, t, n;
	while( cin >> n ){
		t = 0;
		if( n<0 )
			cout << 3*n*(-n+1)/2 << endl;
		else
			cout << 3*n*(n+1)/2 << endl;
	}
	//system("pause");
	return 0;
}

九度OJテーマ1064:逆序数
時間制限:1秒メモリ制限:32メガ特殊判題:No提出:275解決:219
タイトルの説明:
Nを4桁とし、その9倍がちょうどその逆シーケンス数(例えば、1234の逆シーケンス数は4321)である.
Nの値を求める
入力:
プログラムには入力データがありません
出力:
問題に要求された四桁数を出力し、結果が複数組ある場合、各組の結果間はリターンで区切られる
// 2001: 1064: 
// N , 9 ( :1234 4321)
// N 
#include <iostream>
using namespace std;

int reverse( int x ){	//   4 
	int i, j, a[4], y=0;
	for( i=0; i<4; i++ ){
		a[i] = x % 10;
		x /= 10;
	}
	for( i=0; i<4; i++ )
		for( j=0; j<3-i; j++ )
			a[i] *= 10;
	for( i=0; i<4; i++ )
		y += a[i];
	return y;
};

int main()
{
	int i, j, n, t;
	//while( cin >> n )
	//	cout << reverse(n);

	for( i=1000; i<=1111; i++ )	//9*1112>1w  5 
		if( 9*i == reverse(i) )
			cout << i;

	system("pause");
	return 0;
}