洛谷题单 【入门3】循环结构

1.P5718

【深基4.例2】找最小值

#include <stdio.h>

int main() {
   int min,n;
   scanf("%d",&n);
   int a[n];
   for(int i=0;i<n;i++){
      scanf("%d",&a[i]);
   }
   min=a[0];
   for(int i=0;i<n;i++){
      if(a[i]<min)min=a[i];
   }
   printf("%d",min);
   return 0;
}

 2.P5719

【深基4.例3】分类平均

#include <stdio.h>

int main() {
   double sum1=0,sum2=0,average1,average2;
   int n,k,count1=0,count2=0;
   scanf("%d%d",&n,&k);
   for(int i=1;i<=n;i++){
      if(i%k==0){
         sum1+=i;
         count1++;
      }else{
         sum2+=i;
         count2++;
      }
   }
   average1=sum1/count1;
   average2=sum2/count2;
   printf("%.1f %.1f",average1,average2);
   return 0;
}

 3.P5720

【深基4.例4】一尺之棰

#include <stdio.h>

int main() {
   int a,count=1;
   scanf("%d",&a);
   while(a!=1){
      a=a/2;
      count++;
   }
   printf("%d",count);
   return 0;
}

4.P5721 

【深基4.例6】数字直角三角形

#include <stdio.h>

int main() {
   int n,sum=1;
   scanf("%d",&n);
   for(int i=1;i<=n;i++){
      for(int j=n+1-i;j>0;j--){
         if(sum<10)printf("0");
         printf("%d",sum);
         sum++;
      }
      printf("\n");
   }
   return 0;
}

 5.P1009

[NOIP1998 普及组] 阶乘之和

def mul(n):
    if n==1:
        return 1;
    else :
        return n*mul(n-1)
n=int(input())
sum=0
for i in range(1,n+1):
    sum+=mul(i)
print("{}".format(sum))

6.P1980

[NOIP2013 普及组] 计数问题

#include <stdio.h> 

void f(int i,int b,int *count){
	int temp;
	while(i>0){
		temp=i%10;
		i=i/10;
		if(temp==b) *count+=1;
	}
}
int main(){
	int a,b,count=0;
	scanf("%d%d",&a,&b);
	for(int i=1;i<=a;i++)f(i,b,&count);
	printf("%d",count);
	return 0;
}

 7.P1035

[NOIP2002 普及组] 级数求和

#include <stdio.h> 

int main(){
	int k,n=1;
	double s=1;
	scanf("%d",&k);
	while(s<=k){
		n++;
		s+=1.0/n;
	}
	printf("%d",n);
	return 0;
}

8.P2669

[NOIP2015 普及组] 金币

#include <stdio.h> 

int main(){
	int k,day=0,m=0,i=1;
	scanf("%d",&k);
	while(day!=k){
		for(int j=1;j<=i;j++){
			day++;
			m+=i;
			if(day==k)break;
		}
		i++;
	}
	printf("%d",m);
	return 0;
}

 9.P5722

【深基4.例11】数列求和

#include <stdio.h> 
#include <math.h>

int isPrime(int n){
	if(n==2)return 1;
	if(n%2==0) return 0;
	for(int i=3;i<=sqrt(n)+1;i+=2){
		if(n%i==0) return 0;
	}
	return 1;
}
int main(){
	int sum=0,count=0,L,n=2;
	scanf("%d",&L);
	while(sum<L){
		if((sum+n)>L) break;
		if(isPrime(n)&&((sum+n)<=L)){
			printf("%d\n",n); 
			sum+=n;
			count++;
		}
		n+=1;
		 
	}
	printf("%d",count);
	return 0; 
}

10.P5723

【深基4.例13】质数口袋

#include <stdio.h> 
#include <math.h>

int isPrime(int n){
	if(n==2)return 1;
	if(n%2==0) return 0;
	for(int i=3;i<=sqrt(n)+1;i+=2){
		if(n%i==0) return 0;
	}
	return 1;
}
int main(){
	int sum=0,count=0,L,n=2;
	scanf("%d",&L);
	while(sum<L){
		if((sum+n)>L) break;
		if(isPrime(n)&&((sum+n)<=L)){
			printf("%d\n",n); 
			sum+=n;
			count++;
		}
		n+=1;
		 
	}
	printf("%d",count);
	return 0; 
}

 11.P1217

[USACO1.5] 回文质数 Prime Palindromes

#include <stdio.h> 
#include <math.h>
int isPrime(int n){
	if(n==2)return 1;
	if(n%2==0) return 0;
	for(int i=3;i<=sqrt(n)+1;i+=2){
		if(n%i==0) return 0;
	}
	return 1;
}
int main(){
	int a,b,d1,d2,d3,d4,n;
	scanf("%d%d",&a,&b);
	if(b>1&&a<10)
	for(d1=1;d1<=9;d1++){
		n=d1;
		if(isPrime(n)&&(n>=a)&&(n<=b)){
			printf("%d\n",n);
		}
	}
	if(b>10&&a<100)
	for(d1=1;d1<=9;d1++){
		n=10*d1+d1;
		if(isPrime(n)&&(n>=a)&&(n<=b)){
			printf("%d\n",n);
		}
	}
	if(b>100&&a<1000)
	for(d1=1;d1<=9;d1++){
		for(d2=0;d2<=9;d2++){
			n=100*d1+10*d2+d1;
			if(isPrime(n)&&(n>=a)&&(n<=b)){
				printf("%d\n",n);
			}
		}
	}
	if(b>1000&&a<10000)
	for(d1=1;d1<=9;d1++){
		for(d2=0;d2<=9;d2++){
			n=1000*d1+100*d2+10*d2+d1;
			if(isPrime(n)&&(n>=a)&&(n<=b)){
				printf("%d\n",n);
			}
		}
	}
	if(b>10000&&a<100000)
	for(d1=1;d1<=9;d1++){
		for(d2=0;d2<=9;d2++){
			for(d3=0;d3<=9;d3++){
				n=10000*d1+1000*d2+100*d3+10*d2+d1;
				if(isPrime(n)&&(n>=a)&&(n<=b)){
				printf("%d\n",n);
				}	
			}
		}
	}
	if(b>100000&&a<1000000)
	for(d1=1;d1<=9;d1++){
		for(d2=0;d2<=9;d2++){
			for(d3=0;d3<=9;d3++){
				n=100000*d1+10000*d2+1000*d3+100*d3+10*d2+d1;
				if(isPrime(n)&&(n>=a)&&(n<=b)){
				printf("%d\n",n);
				}	
			}
		}
	}
	if(b>1000000&&a<10000000)
	for(d1=1;d1<=9;d1++){
		for(d2=0;d2<=9;d2++){
			for(d3=0;d3<=9;d3++){
				for(d4=0;d4<=9;d4++){
					n=1000000*d1+100000*d2+10000*d3+1000*d4+100*d3+10*d2+d1;
					if(isPrime(n)&&(n>=a)&&(n<=b)){
					printf("%d\n",n);
					}
				}
			}
		}
	}
	if(b>10000000&&a<100000000)
	for(d1=1;d1<=9;d1++){
		for(d2=0;d2<=9;d2++){
			for(d3=0;d3<=9;d3++){
				for(d4=0;d4<=9;d4++){
					n=10000000*d1+1000000*d2+100000*d3+10000*d4+1000*d4+100*d3+10*d2+d1;
					if(isPrime(n)&&(n>=a)&&(n<=b)){
					printf("%d\n",n);
					}
				}
			}
		}
	}
	return 0; 
}

 12.P1423

小玉在游泳

#include <stdio.h> 

int main(){
	double s,step=2,sum=0;
	int count=0;
	scanf("%lf",&s);
	while(sum<s){
		sum+=step;
		step*=0.98;
		count++;
	}
	printf("%d",count);
	return 0;
}

 13.P1307

[NOIP2011 普及组] 数字反转

#include <stdio.h>

int main(){
	int n,temp,a,flag=0;
	scanf("%d",&n);
	if(n<0){
		n=-n;
		printf("-");
	}
	if(n==0)printf("0");//易错点
	a=n;
	while(n!=0){
		temp=n%10;
		if(temp||flag){
		printf("%d",temp);
		flag=1;//易错点
		}
		n/=10;
	}
	return 0;
}

 14.P1720

月落乌啼算钱(斐波那契数列)

#include <stdio.h>
#include <math.h>
int main(){
	int n;
	double f;
	scanf("%d",&n);
	f=((pow(((1+sqrt(5))/2.0),n))-(pow(((1-sqrt(5))/2.0),n)))/sqrt(5);
	printf("%.2f",f);
	return 0;
}

 15.P5724

【深基4.习5】求极差 / 最大跨度值

#include <stdio.h>

int main(){
	int n,min,max;
	scanf("%d",&n);
	int a[n];
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	min=a[0];
	max=a[0];
	for(int i=0;i<n;i++){
		if(a[i]>max)max=a[i];
		if(a[i]<min)min=a[i];
	}
	printf("%d",max-min);
	return 0;
} 

 16.P1420

最长连号

#include <stdio.h>
int main(){
	int n,count;
	scanf("%d",&n);
	int a[10000],b[10000]={0},j=0;
	for(int i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	for(int i=0;i<n-1;i++){
		if(a[i+1]==(a[i]+1)){
			b[j]++;
		}else{
			j++;
		}
	}
	count=b[0];
	for(int i=0;i<n;i++){
		if(b[i]>count)count=b[i];
	}
	count++;
	printf("%d",count);
	return 0;
}

 17.P1075

[NOIP2012 普及组] 质因数分解

#include<stdio.h>
#include<math.h>
int isPrime(int n){
	if(n==2)return 1;
	if(n%2==0)return 0;
	for(int i=3;i<sqrt(n)+1;i+=2){
		if(n%i==0)return 0;
	}
	return 1;
}
int main(){
	int n,max;
	scanf("%d",&n);
	for(int i=2;i<n;i++){
		if(n%i==0&&isPrime(i)&&isPrime(n/i)){
			if(i>n/i){
				max=i;
			}else{
				max=n/i;
			}
			break;
		}
	}
	printf("%d",max);
	return 0;
}

 18.P5725

【深基4.习8】求三角形

#include <stdio.h>
int main(){
	int n,k=1;
	scanf("%d",&n);
	for(int i=1;i<=n*n;i++){
		if(i<10)printf("0");
		printf("%d",i);
		if(i%n==0)printf("\n");
	}
	printf("\n");
	for(int i=1;i<=n;i++){
		for(int j=0;j<n-i;j++){
			printf("  ");
		}
		for(int j=1;j<=i;j++){
			if(k<10)printf("0");
			printf("%d",k);
			k++;
		}
		printf("\n");		
	}
	return 0;
}

19.P5726

【深基4.习9】打分

#include <stdio.h>

int main(){
	double a[1000],min,max,sum=0,average;
	int n;
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%lf",&a[i]);
	}
	min=a[0];
	max=a[0];
	for(int i=0;i<n;i++){
		if(a[i]>max)max=a[i];
		if(a[i]<min)min=a[i];	
	}
	for(int i;i<n;i++){
		sum+=a[i];
	}
	average=(sum-min-max)/(n-2);
	printf("%.2f",average);
	return 0;
} 

20.P4956

[COCI2017-2018#6] Davor

#include <stdio.h>

int main(){
	int n,k,x,sum,temp1,temp2;	
	scanf("%d",&n);
	sum=(7*x+21*k)*52;
	for(x=100;x>0;x--){
		for(k=1;k<n/(52*21)+1;k++){
			sum=(7*x+21*k)*52;
			if(sum==n){
				temp1=x;
				temp2=k;
				break;
			}
		}
		if(sum==n){
			break;
		}
	}
	printf("%d\n%d",temp1,temp2);
	return 0;
} 

 21.P1089

[NOIP2004 提高组] 津津的储蓄计划

#include <stdio.h>

int main(){
	int sum1=0,sum2=0,a[12],temp,sum=0,flag=1,j,k;
	for(int i=0;i<12;i++){
		sum1+=300;
		scanf("%d",&a[i]);
		sum1-=a[i];
		if(sum1>=100){
			temp=sum1/100;
			sum1-=temp*100;
			sum2+=temp*100;	
		}else if(sum1<0){
			j=-(i+1);
			if(flag)k=j;
			flag=0;
		}
	}
	sum=sum1+sum2*1.2;
	if(flag){
		printf("%d",sum);
	}else{
		printf("%d",k); 
	}
	return 0;
} 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱看烟花的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值