1. 程式人生 > >迴圈結構(2)

迴圈結構(2)

1.p1046質因子分解

給定一個整數n,將其分解成質因子連乘的形式。
樣例輸入 Sample Input

12

================
75
樣例輸出 Sample Output

12=2* 2*3

==================
75=3* 5*5
程式碼

#include<bits/stdc++.h>
using namespace std;
bool first=1;
bool prime(int k)
{
	for (long long i=2;i*i<=k;i++)
		if (k%i==0) return 0;
	return
1; } void print(int k) { if (first) { cout<<k; first=0; } else cout<<'*'<<k; } int main() { int n; scanf("%d",&n); cout<<n<<'='; for (int i=2;i<=n;i++) if (prime(i)) for (;n%i==0;) { n/=i; print(i); } return 0; }

2.p1049 cantor表

描述 Description
現代數學的著名證明之一是Georg Cantor證明了有理數是可列舉的。他是用下面這一張表來證明這一命題的:
1/1 1/2 1/3 1/4 1/5 …
2/1 2/2 2/3 2/4 …
3/1 3/2 3/3 …
4/1 4/2 …
5/1 …

我們以Z字形給上表的每一項編號。
第一項是1/1,然後是1/2,2/1,3/1,2/2,…
在這裡插入圖片描述


輸入格式 Input Format
輸入:整數N(1≤N≤10000000)
輸出格式 Output Format
輸出:表中的第N項
樣例輸入 Sample Input

7
樣例輸出 Sample Output

1/4
時間限制 Time Limitation
1s
程式碼

//演算法分析:不難發現,每條斜線都有著不同的數字,第k條斜線則就會有k個數字,前n條斜線則有x(k)=1+2+3+··+k=1/2*k*(k+1)個數字.
//根據這個規律,很容易就可以知道第n個數字位於使得n<=x(k)且k最小的第k條斜線上的倒數第i=x(k)-n+1位置上,則其值為i/(k+1-i).
#include<
stdio.h>
int main() { int n,s,k; while(scanf("%d",&n)==1) { s=0;k=1; while(1) { s+=k; if(s>=n) { if(k%2==0) printf("%d/%d\n",(k+1)-(s-n+1),s-n+1); else printf("%d/%d\n",s-n+1,(k+1)-(s-n+1)); break; } k++; } } return 0; }

3.p1528 跑步訓練

/*
*題目:詳見haoi2013 
*演算法:看備註 
*備註:注意:其實是可以用這個最大時間作為判斷邊界的。 
*/
#include<bits/stdc++.h>
using namespace std;
int M,T,t1,t2,t3;//
char ch;
int i;
int main()
{
	scanf("%d %d %d %d %d",&M,&T,&t1,&t2,&t3);
	for (i=1;i<=T;i++)
	{
		cin>>ch;
		if (ch=='f')
			M-=t2*2;
		else 
			M=M-t1-t3;
		if (M<0) break;
	}
	cout<<i-1<<endl;
	return 0;
}