每日一练:

10.歌手大奖赛

#include<stdio.h>

int main(){
	int max=90,min=100,ans=0,n,x=10;
	while(x--){
		scanf("%d",&n);
		if(n<min)
		min=n;
		if(n>max)
		max=n;
		ans+=n;
	}
	printf("max=%d\nmin=%d\nans=%d\n",max,min,(ans-max-min)/8);
	return 0;
} 

11.输出斐波那契第n项

#include<stdio.h>

int f(int n){
	if(n<=2)
	return 1;
	else
	return f(n-1)+f(n-2);
	}

int main(){
	int n;
	scanf("%d",&n);
	printf("%d",f(n));
}

12.输出斐波那契每一项

#include<stdio.h>

int f(int n){
	if(n<=2)
	return 1;
	else
	return f(n-1)+f(n-2);
	}

int main(){
	int n;
	scanf("%d",&n);
	for(int i=1; i<=n; i++)
	printf("%d ",f(i));
	return 0;
}

13.斐波那契数列其他问题

#include<stdio.h>

int main(){
	int n;
	scanf("%d",&n);
	int a[n];
	a[0]=a[1]=a[2]=1;
	for(int i=3; i<=n; i++){
		a[i]=(a[i-1]+a[i-2])%10007;
	}
	printf("%d",a[n]);
	return 0;
}

14.求前n项的和,但如果数据过大,使用int就是错误的。n用long定义,结果输出%l64d

#include<stdio.h>

int main(){
	int n;
	scanf("%d",&n);
	printf("%d",n*(n+1)/2);
	return 0;
}
#include<stdio.h>

int main(){
	long n;
	scanf("%d",&n);
	printf("%l64d",n*(n+1)/2);
	return 0;
}

15.与14题相同

16.图像显示

#include<stdio.h>

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

17.星期几

#include<stdio.h>

int main(){
	int a[23000],count=0,ans=0;
	a[0]=6;
	for(int i=1; i<23000; i++){
		if(a[i-1]<7)
		a[i]=a[i-1]+1;
		else
		a[i]=1;
	}
	for(int i=0; i<23000;){
		if(count<4){
			i=i+365;
			count++;
			if(a[i]==7)
			ans++;
		}
		else{
			i=i+366;
			count=0;
			if(a[i]==7)
			ans++;
		}
	}
	printf("%d",ans);
	return 0;
}

18.16进制转10进制,如何输入字符串,用 char s[N],scanf("%s",s);如何将字符转换为数字,c-'0'

#include<stdio.h>
#define N 50

int main(){
	char s[N];
	scanf("%s",s);
	int temp;
	long sum=0;
	for(int i=0; s[i]; i++){
		if(s[i]<='9'&&s[i]>='0')
		temp=s[i]-'0';
		else if(s[i]<='f'&&s[i]>='a')
		temp=s[i]-'a'+10;
		else if(s[i]<='F'&&s[i]>='A')
		temp=s[i]-'A'+10;
		sum=sum*16+temp;
	}
	printf("%ld\n",sum);
	return 0;
}

19.将16进制转换为10进制,利用printf的输出%d 十进制,%o八进制,%x十六进制,不存在二进制,数学上是O、B、D、H

#include<stdio.h>

int main(){
	int n;
	scanf("%d",&n);
	printf("%x",n);
	return 0;
}

本来想用10进制转换二进制的递归方法,发现没有办法把数字转换为字符,而且在计算过程中return fact(n/16)*10+n%16;不能是字符没法计算。但是10进制转换8进制可以用这个方法。这个里面有很多小细节,将数字转换为16进制字符printf("%c",a[i]-10+'A');

#include<stdio.h>

int main(){
	int n,a[50],count=0;
	scanf("%d",&n);
	for(int i=0; n>0; i++){
		a[i]=n%16;
		n=n/16;
		count++;
	}
	for(int i=count-1; i>=0; i--){
		if(a[i]>=0&&a[i]<=9)
		printf("%d",a[i]);
		else{
			printf("%c",a[i]-10+'A');
		}
	}
	return 0;
}

20.16进制转换为8进制,这是利用输入输出

#include<stdio.h>

int main(){
	int n;
	scanf("%x",&n);
	printf("%o",n);
	return 0;
}

还有一种方法,将16进制装换为10进制,再将10进制转换为8进制。将前面两种加在一起。

#include<stdio.h>
#define N 50

long tran8(int n){
	if(n<8)
	return n;
	else
	return tran8(n/8)*10+n%8;
}
long tran16(char *s){
	
	int temp;
	long sum=0;
	for(int i=0; s[i]; i++){
		if(s[i]<='9'&&s[i]>='0')
		temp=s[i]-'0';
		else if(s[i]<='f'&&s[i]>='a')
		temp=s[i]-'a'+10;
		else if(s[i]<='F'&&s[i]>='A')
		temp=s[i]-'A'+10;
		sum=sum*16+temp;
	}
	return sum;
}
int main(){
	char s[N],*p;
	p=&s[0];
	scanf("%s",s);
	long m=tran16(p);
	long n=tran8(m);
	printf("%ld",n);
	return 0;
}

21.判断是否是回文

#include<stdio.h>

int main(){
	int a[6];
	for(int i=0;i<6;i++)
	scanf("%d",&a[i]);
	for(int i=0;i<3;i++){
		if(a[i]!=a[5-i]){
			printf("不是");
			break;
		}
		else{
			if(i==2)
			printf("是");
		}
	}
	return 0;
}

22.闰年的判断

#include<stdio.h>

int main(){
	int n;
	scanf("%d",&n);
	if(n%4==0&&(n%100!=0||n%400==0))
	printf("是闰年"); 
	else
	printf("不是闰年");
	return 0; 
}

23.输出C字母图形

#include<stdio.h>
#include<math.h>
int main(){
	for(double y=10; y>=-10; y--){
		int m=2.5*sqrt(100-y*y);
		for(int x=1;x<30-m;x++)
		printf(" ");
		printf("*\n");
	}
	return 0;
}

24.巴斯卡三角形,只会写实现中间空一格的

#include<stdio.h>
int main(){
	int a[12][23];
	for(int i=0; i<12; i++){
		for(int j=0; j<23; j++)
		a[i][j]=0;
	}
	a[0][11]=1;
	for(int i=1; i<12; i++){
		a[i][11-i]=a[i][11+i]=1;
		for(int j=2; j<11+i; j++){
			a[i][j]=a[i-1][j-1]+a[i-1][j+1];
		}
	}
	for(int i=0; i<12; i++){
		for(int j=0; j<23; j++){
			if(a[i][j]==0)
			printf(" ");
			else
			printf("%d",a[i][j]);
		}
		printf("\n");
	}
}

25.三色旗

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值