头歌作业复盘11

发布时间 2023-11-16 20:29:40作者: lulixiu

打印n行杨辉三角未完成篇,最后一行第一个数字有空格版,评测了80多次

#include <stdio.h>
void main()
{
int n,i,j,k;
scanf("%d", &n);
int a[n][n];
//生成杨辉三角 
for (i = 0; i < n; i++)///行 
{
for (j = 0; j <= i; j++)//列 
{
if (j == 0 || j == i)
a[i][j] = 1;//让每行首尾数字都为1 
else
a[i][j] = a[i - 1][j - 1] + a[i - 1][j];//每个数等于头上两相邻数字之和 
}
}
//打印杨辉三角 
for (i = 0; i < n; i++)
{
for (k = 0; k < n - i-1 ; ++k)//每一列都打个空格,搞不懂为什么第一个数字前有空格 
{
printf(" ");
}
for (j = 0; j <= i; j++)//格式化输出 
{
printf("%5d", a[i][j]);
}
printf("\n");
}

}

输出数字各位数之积

#include<stdio.h>
int main()
{
	int n,s;
	int t=1;
	scanf("%d",&n);
	while(n!=0)
	{
		s=n%10; //获取各位数字 
				//2583%10=3,t=3,n=258
		t*=s;//乘起来 
				//258%10=8,24,25
				//25%10=5,120,2
				//2%10=2,240,0
		n/=10;//每次循环都少一个位数 
	}
	printf("%d\n",t);
	//2583,2*5*8*3=240
	return 0;
}

求数列的第n项及前n项之和

	    //数列如下:
		//f1=f2=1
		//fn=3fn-1+2fn-2
		//n>2
#include <stdio.h>
int f(int n);
int main()
{
	int n,fn=1,sum=0;
	int i;
	scanf("%d",&n);
	if(n==1)
	{
		fn=1;
		sum=1;
	}
	else if(n==2)
	{
		fn=1;
		sum=2;
	}
	//前两项要特殊点 
	else if(n>2)
	{
		sum=2;
		fn=1;
		for(i=3;i<=n;i++)//从第3项开始 
		{
			fn=f(i);//调用函数 
			sum+=fn;//加上后几项 
			
		}	
	}
	printf("%d\n%d",fn,sum);
	return 0;
}

int f(n)
{
	if(n==3)
		return 5;
	else if(n==4)
		return 17;
	else if(n>4)//从第5项开始递归 
		return 3*f(n-1)+2*f(n-2);
	
} 

计算在区间 1 到 n 的所有整数中,数字 x(0 ≤ x ≤ 9)共出现了多少次?

//在 1到 11 中,即在 1、2、3、4、5、6、7、8、9、10、11 中,数字 1 出现了 4 次。输入两个整数,第一个数为n的值,第二个为x的值。
#include<stdio.h>
int main(void)
{
	int n,x,i,t=0;
	scanf("%d%d",&n,&x);
	for(i=1;i<=n;i++)//遍历 
	{
		//列举出所有的情况 
		if((i%10==x)&&(i/10==x))
			t+=2;
		else if((i/100==x)&&(i%10==x))
			t+=2;
		else if((i/10==x)&&(i%10!=x))
			t+=1;
		else if(i/100==x)
			t+=1;
		else if((i%10==x))
			t+=1;	
	}
	printf("%d",t);
	return 0;
}

输入打印行数n,输出共2n-1行的菱形

#include<stdio.h>
int main()
{
	int n,i,j,k;
	scanf("%d",&n);
	for(i=0;i<=n;i++)
	{
		
		for(k=0;k<n-i;++k)//先打印每行的空格 
		{
			printf(" ");
		}
		
		for(j=1;j<=2*i-1;++j)//再打上半部分的* 
		{
			printf("*");	
		}
	printf("\n");//每次换行 
	}
	
	
	for(i=n-1;i>0;i--)//下半部分,从n-1开始, 
	{
		
		for(k=n-i;k>0;k--)
		{
			printf(" ");
		}
		
		for(j=2*i-1;j>0;j--)
		{
			printf("*");
		}
	printf("\n");
	}
	return 0;
}

求最大公约数来求最小公倍数

#include<stdio.h>
int zhanzhuan(int a,int b)
{
	if(b==0)//停止调用自己的条件 
		return a;
	return zhanzhuan(b,a%b);
	//54 24
	//24 6
	//6 0,所以6是最小公倍数 
}
int main()
{
	int a,b,bei;
	scanf("%d%d",&a,&b);
	if(a<b)
	{
		int t;
		t=a;
		a=b;
		b=t;
	}//辗转相除的条件得是大的数除小的数 
	int yue=zhanzhuan(a,b);
	bei=(a*b)/yue;//两个数的乘积等于它们的最大公约数和最小公倍数的积
	printf("最大公约数是:%d\n最小公倍数是:%d",yue,bei);	
	return 0;
}

直接求最小公倍数

#include<stdio.h>
int lcm(int a, int b) 
{
int max = (a > b) ? a : b; //从最大的数开始要快些 
while(1)
	 {
if (max % a == 0 && max % b == 0)
return max;//得到最小的公倍数直接返回 
max++;//自身递增直到都能整除a和b 
}
}
int main() {
int num1, num2;
printf("请输入两个整数:");
scanf("%d %d", &num1, &num2);
int result = lcm(num1, num2);
printf("最小公倍数是:%d\n", result);
return 0;
}

计算一年有好多天

#include <stdio.h>
  int main(void)
  {
  int i,year, month, day;
  scanf("%d-%d-%d", &year, &month, &day);
  int totalDays = 0;
  for ( i = 1; i < month; i++) 
  {
   switch (i) {
  	case 12: 
totalDays += 31;
break;
		case 11: 
totalDays += 30;
break;
		 case 10: 
totalDays += 31;
break;
		case 9:  
totalDays += 30;
break;
		 case 8:  
totalDays += 31;
break;
		case 7:  
totalDays += 31;
break;
		case 6:  
totalDays += 30;
break;
		case 5:  
totalDays += 31;
break;
		case 4: 
totalDays += 30;
break;
		 case 3:  
totalDays += 31;
break;
	case 2: 
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) //判断是不是闰年 
  totalDays += 29;
else 
  totalDays += 28;
break;
	case 1:  
totalDays += 31;
break;
}
  }
  totalDays+= day;
  printf("%d\n", totalDays);
  return 0;
}

计费,包含取整取大的实际情况

#include <stdio.h>

int main(void) {
  int code,a,b,c,d,e,t;
  float wei, price;
  scanf("%d,%f", &code, &wei);
  switch (code) {
case 0:
a=wei;//存储wei的整数部分 
if(wei>a){
	if (wei <= 1)
price = 10;
  else
price = 10 +a* 3.0;
  break;
	}
	else if(wei==a){
		if (wei <= 1)
price = 10;
  else
price = 10 + (wei - 1) * 3.0;
  break;
	}
  

case 1:
b=wei;
if(wei>b){
	if (wei <= 1)
price = 10;
  else
price = 10 + b* 4.0;
  break;
	}
	else if(wei==b){
		if (wei <= 1)
price = 10;
  else
price = 10 + (wei - 1) * 4.0;
  break;
	}
  

case 2:
c=wei;
if(wei>c){
	if (wei <= 1)
price = 15;
  else
price = 15 + c* 5.0;
  break;
	}
	else if(wei==c){
		if (wei <= 1)
price = 15;
  else
price = 15 + (wei - 1) * 5.0;
  break;
	}
  

case 3:
d=wei;
if(wei>d){
	if (wei <= 1)
price = 15;
  else
price = 15 + d * 6.5;
  break;
	}
	else if(wei==d){
		if (wei <= 1)
price = 15;
  else
price = 15 + (wei - 1) * 6.5;
  break;
	}
  

case 4:
	e=wei;
	if(wei>e){
		if (wei <= 1)
price = 15;
  else
price = 15 + e * 10.0;
  break;
		}
		else if(wei==e){
			if (wei <= 1)
price = 15;
  else
price = 15 + (wei - 1) * 10.0;
  break;
		}
		
		
default:
  printf("Error in Area\nPrice: 0.00\n");
  return 0;
  }
  
  printf("Price: %.2f\n", price);
  return 0;
}