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.三色旗