目录
题目一:数数子
输入:
1
2
6
输出:
0
1
5
思路:直接代入2,3,5因子进行求解。(简化计算量)
#include<stdio.h>
int main()
{
int n,t,k;
int x,y,z,a,b,c;
while(scanf("%d",&n)!=EOF)
{
x=n/2;//由于定义的是整型,所以小数点后面的会省去
y=n/3;
z=n/5;
a=n/(2*3);
b=n/(3*5);
c=n/(2*5);
k=n/(2*3*5);
t=x+y+z+k-a-b-c;//这种算法可以简化计算量,防止输出时间超限
printf("%d\n",t);
}
return 0;
}
//#include<stdio.h>//如果采用以下方法,则容易造成输出超限
//int main(){
// int n,m,j,i,k;
// while(scanf("%d",&n)!=EOF){
// int x=0;
// for(int i=1;i<=n;i++)
// if(i%2==0||i%3==0||i%5==0)
// x++;
// printf("%d\n",x);
// }
// return 0;
//}
题目二:蚂蚁问题
输入:
15
5
2 6 7 10 12
输出:
7 13
思路:看距哪边要走的距离长短来写,输出的一个是短里选长,一个是长里选长(落下杆子的路程)
#include<stdio.h>
int main() {
int n,l,i,j,t,k,o;
int a[1001],b[1001],c[1001];
scanf("%d",&l);//长度
scanf("%d",&n);//数量
for(i=1; i<=n; i++)
scanf("%d",&a[i]);
for(i=1; i<=n; i++) {
c[i]=l-a[i];//求出距离右边多远
}
for(i=1; i<=n; i++) {
if(a[i]>c[i])
c[i]=a[i];//用C数组存储距离左右的最大值
}
// for(i=1; i<=n; i++)//验证前面是否错误
// printf("%d ",a[i]);
for(j=1; j<n; j++)
for(i=1; i<=n-j; i++)
if (c[i]<c[i+1]) {
t=c[i];
c[i]=c[i+1];
c[i+1]=t;
}//大小排序,大到小
for(i=1; i<=n; i++) {
b[i]=l-a[i];
}
for(i=1; i<=n; i++) {
if(a[i]<b[i])
b[i]=a[i];//用B数组存储距离左右的最小值,之所以取数组B的最大值作为最短距离,是因为如不这样选,会有蚂蚁无法落下杆子
}
for(j=1; j<n; j++)
for(i=1; i<=n-j; i++)
if (b[i]<b[i+1]) {
o=b[i];
b[i]=b[i+1];
b[i+1]=o;
} //排序,大到小
printf("%d %d",b[1],c[1]);//输出最短和最长
return 0;
}
题目三:求区间和
输入:
4
4 3 2 1
2
1 4
2 3
输出:
10
5
思路;前缀和与差分
链接:关于前缀和与差分.
#include <stdio.h>
int main(){
int a[1001],b[1001],sum[1001];
int i,j,t,n,m;
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
for(i=1;i<=n;i++)
sum[i]=a[i]+sum[i-1];//数组sum代表数组前面i项的和(好处;减少计算量,减少运行时间,防止出现输出超限的问题)
scanf("%d",&m);
while(m--){
int k,t,l,o;
scanf("%d %d",&k,&t);
l=sum[t]-sum[k-1];//可以很轻松地求数组t到k的和,并且计算难度底
printf("%d\n",l);
}
return 0;
}
题目四:高中分段函数
输入:
4
1
2
3
50
输出:
1
2
6
152170130090
思路:定义数组,减少计算量,防止输出超限
#include<stdio.h>
int main() {
int n,i=3;
long long a[51];
a[1]=1;
a[2]=2;
do {
a[i]=a[i-1]+a[i-2]+i*(i-1)/2;//提前制定好数组a的含义,方便后面输出
i++;
} while(i<=50);
scanf("%d",&n);
while(n--) {
long long m;
scanf("%lld",&m);
printf("%lld",a[m]);
printf("\n");
}
return 0;
}
本周写题26道,排名基本无变化