3.4
奇数倍数
先写一个函数判断这个数是否每个位都为奇数
既然要满足是2019的倍数那么直接设此数为2019的i倍(i为大于等于1的整数,再用while语句设置一个满足条件时的结束标志
#include <stdio.h>
#include <stdlib.h>
int ji(int n){
while(n){
if((n%10)%2==0)
{
return 0;
}
n=n/10;
}
return 1;
}
int main(int argc, char *argv[])
{
long n;
int b=0;
int i=1;
while(b==0){
n=i*2019;
if(ji(n)==1)
b=1;
else b=0;
i++;
}
printf("%d",n);
// 请在此输入您的代码
return 0;
}
求值
写一个判断约数个数的函数,然后再用一个for循环判断,每个数的约数是否为一百个。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int yueshu(int n){
int count=0;
for(int i=1;i<=sqrt(n);i++){
if(n%i==0)
count=count+2;
}
return count;
}
int main(int argc, char *argv[])
{
long i;
for(i=50;i<100000;i++){
if(yueshu(i)==100){
printf("%ld",i);
break;
}
}
// 请在此输入您的代码
return 0;
}
求和
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
long n;
int a[200000];
scanf("%ld\n",&n);
for(int k=0;k<n;k++){
scanf("%d ",&a[k]);
}
long sum=0;
int i,j;
for(i=0;i<n-1;i++){
for(j=i+1;j<n;j++){
sum=sum+a[i]*a[j];
}
}
printf("%ld",sum);
// 请在此输入您的代码
return 0;
}
这种方法有的测试数据超时了
那么需要换种思路 a[1]*a[2]+a[1]*a[2]+...+a[1]*a[n]+a[2]*a[3]+a[2]*a[4]+....+....
相当于a[1]*(a[1]+a[2]+...+a[n]-a[1])+a[2]*(a[3]+a[4]+a[5]+...a[n])+...
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
long n;
int a[200000];
scanf("%ld",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
long b=0;
long sum=0;
int i,j;
for(int j=0;j<n;j++){
sum=sum+a[j];
}
for(int i=0;i<n-1;i++){
sum=sum-a[i];
b=b+a[i]*sum;
}
printf("%ld",b);
// 请在此输入您的代码
return 0;
}
先把a[1]到a[n]的和sum算出来,每次将sum减去a[i]更新sum的值,大大减少运行时间。这样就可以啦!