迴圈結構(2)
阿新 • • 發佈:2018-11-27
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;
}