基本編程知識
當一個表達式對一個數取餘的時候大概率存在週期,一般在三倍取模的數之內
(a+b)%c=(a%c+b%c)%c
(ab)%c=((a%c)(b%c))%c
ab%c=(a%c)b%c
例題
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[15];//定義成long long用sort會出現問題
while(scanf("%d",&a[0])!=EOF)
{
for(int i=1; i<10; i++)
scanf("%d",&a[i]);
sort(a,a+10);
for(int i=0; i<9; i++)
printf("%d ",a[i]);
printf("%d\n",a[9]);
}
return 0;
}
楓之舞–排序
#include <bits/stdc++.h>
using namespace std;
int x[1005];
int main()
{
int t;
cin>>t;
while(t--)
{
int n;
cin>>n;
for(int i=0;i<n;i++)
scanf("%d",&x[i]);
sort(x,x+n,less<int>());
for(int i=0;i<n-1;i++)
printf("%d ",x[i]);
printf("%d",x[n-1]);
printf("\n");
}
return 0;
}
讓氣球飛吧
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char b[6][10]= {"red","green","blue","pink","black","orange"};
int n;
while(scanf("%d",&n)!=EOF)
{
int res[6]= {0};
int k;
for(k=0; k<n; k++)
{
char a[10];
scanf("%s",a);
int i;
for(i=0; i<6; i++)
{
if(strcmp(b[i],a)==0)
res[i]++;
}
}
int num=0,max=res[0];
int j;
for(j=1; j<6; j++)
{
if(max<res[j])
{
max=res[j];
num=j;
}
}
printf("%s\n",b[num]);
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int res[1000];
int main()
{
res[1]=res[2]=1;
int a,b,n;
while(cin>>a>>b>>n)
{
if(a==0&&b==0&&n==0)
break;
if(n==1||n==2)
cout<<res[n]<<endl;
else
{
int i;
for(i=3;i<1000;i++)//自動找循環節
{
res[i]=(a*res[i-1]+b*res[i-2])%7;
if(res[i]==1&&res[i-1]==1)//只將一個循環節存入數組
break;
}
n=n%(i-2);//注意循環節的下標,輸出會造成些問題
if(n==0)
cout<<res[i-2]<<endl;
else
cout<<res[n]<<endl;
}
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long int n;
while(cin>>n)
{
long long int n1=n,n2=n+1,n3=2*n+1;
long long int res;
//運用公式F(n)=(1/6*n*(n+1)*(2n+1))%1007
//對1/6的處理,拆成1/2*1/3,由題意一定能整除
if(n1%2==0)
n1=n1/2;
else
n2=n2/2;
if(n1%3==0)
n1=n1/3;
else if(n2%3==0)
n2=n2/3;
else
n3=n3/3;
res=((((n1%1007)*(n2%1007))%1007)*(n3%1007))%1007;//瘋狂取模避免溢出
cout<<res<<endl;
}
return 0;
}
觀察個位數的乘法,僅有25能出現0
因此把n!進行因式分解一對25末尾就有一個0
而n!中2的數量一定大於5的數量
因此即統計n!因式分解後出現幾個5即可
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long int n;
while(cin>>n)
{
int res=0;
while(n)
{
n=n/5;
res=res+n;
}
cout<<res<<endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
int n=1;
while(t--)
{
char ch[12][120];
int num[12];
for(int i=1; i<=10; i++)
cin>>ch[i]>>num[i];
int maxn=-999999;
for(int i=1; i<=10; i++)
{
if(num[i]>maxn)
maxn=num[i];
}
printf("Case #%d:\n",n);
n++;
for(int i=1; i<=10; i++)
if(num[i]==maxn)
cout<<ch[i]<<endl;
}
return 0;
}