2021年12月9日学习总结

 目录:

1.混和牛奶

2.小兔子的果园

3.小叶子学英文

混和牛奶

描述

牛奶包装是一个如此低利润的生意,所以尽可能低的控制初级产品(牛奶)的价格变的十分重要。请帮助快乐的牛奶制造者(Merry Milk Makers)以可能的最廉价的方式取得他们所需的牛奶。快乐的牛奶制造公司从一些农民那购买牛奶,每个农民卖给牛奶制造公司的价格不一定相同。而且,如一只母牛一天只能生产一定量的牛奶,农民每一天只有一定量的牛奶可以卖。每天,快乐的牛奶制造者从每个农民那购买一定量的牛奶,少于或等于农民所能提供的最大值。给出快乐牛奶制造者的每日的牛奶需求,连同每个农民的可提供的牛奶量和每加仑的价格,请计算快乐的牛奶制造者所要付出钱的最小值。注意: 每天农民生产的牛奶的总数对快乐的牛奶制造者来说足够的。

格式

输入格式

第 1 行:二个整数, N 和 M。第一个数值,N,(0<= N<=2,000,000)是快乐的牛奶制造者的一天需要牛奶的数量。第二个数值,M,(0<= M<=5,000)是他们可能从农民那买到的数目。第 2 到 M+1 行:每行二个整数,Pi 和 Ai。 Pi(0<= Pi<=1,000) 是农民 i 牛奶的价格。 Ai(0 <= Ai <= 2,000,000)是农民 i 一天能卖给快乐的牛奶制造者的牛奶数量。

输出格式

单独的一行包含单独的一个整数,表示快乐的牛奶制造者拿到所需的牛奶所要的最小费用

样例

样例输入 Copy

100 5
5 20
9 40
3 10
8 80
6 30

样例输出 Copy

630		

 大概思路:求最小费用,所以可以先进行排序再来选择牛奶,

按照价格高低从低到高进行排序(快排、冒泡、选择都行)

求和时要考虑是否超过所需量。

代码:

#include<stdio.h>
struct node{
	int p;
    int s;
};
struct node a[10000];//定义a数组 
void quicksort(int left,int right)//快排 
{
	int i,j,t,temp,h;
	if(left>right)
	return;
	temp=a[left].p;
	h=a[left].s;
	i=left;
	j=right;
	while(i!=j)
	{
	 while(a[j].p>=temp&&i<j)
	 j--;
	 while(a[i].p<=temp&&i<j)
	 i++;
	 if(i<j)
	 {
	 	t=a[i].p;
	 	a[i].p=a[j].p;
	 	a[j].p=t;
	 	t=a[i].s;
	 	a[i].s=a[j].s;
	 	a[j].s=t;
		 }
		 }
	a[left].p=a[i].p;
	a[i].p=temp;
	a[left].s=a[i].s;
	a[i].s=h;
	quicksort(left,i-1);
	quicksort(i+1,right);	 	
	}
int main()
{
  int n,m;
  scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++)
{
	scanf("%d %d",&a[i].p,&a[i].s);//输入数据 
}
   quicksort(1,m);
  int sum=0;
   int z=0;
   for(int i=1;i<=m;i++)
   {
     z+=a[i].s;	   	
     sum+=(a[i].p*a[i].s);//求和 
	 if(z>n) 
	 {
	 	sum-=((z-n)*a[i].p);//超过n的部分减去
	 	break;
}
   }
   printf("%d",sum);
}

 小兔子的果园

 

描述

小兔子有n个果园,果园里有许多果树,有苹果树,芒果树,香蕉树,李子树,无花果树。
终于到了丰收的季节,小兔子从每个果园采了许多的水果,现在小兔子想给每个果园的产量排序。
因为小兔子爱吃芒果,所以按芒果的数量从大到小排序,如果芒果的数量相同,那就按照其他水果的总数量从小到大排序。
不会存在芒果数量相同且其他水果的总数量相同的情况。

格式

输入格式

第一行输入一个n,代表n个果园(1<=n<=10)
接下来n行,每行五个数,分别代表小兔子从果园里采摘的苹果数量,芒果数量,香蕉数量,李子数量,无花果数量
每个水果的数量不超过10,且没有负数。

输出格式

输出n个果园产量排序后的结果

样例

样例输入 Copy

5
1 2 3 4 5
1 3 3 4 5
1 4 2 2 2
1 1 1 1 1
1 4 1 1 1

样例输出 Copy

1 4 1 1 1
1 4 2 2 2
1 3 3 4 5
1 2 3 4 5
1 1 1 1 1		

 思路:

和题意一样先比较芒果数量,如果相等比较其他水果总和。

代码:

#include<stdio.h>
struct node{
	int a,b,c,d,e;
};//结构体 
struct node f[10000]; 
struct node g[10000]; //用于交换的空数组,与 {t=a;a=b;b=t;}的作用相同 
int main() 
{
	
	int n,t;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
	{
		scanf("%d %d %d %d %d",&f[i].a,&f[i].b,&f[i].c,&f[i].d,&f[i].e);
}
    for(int i=0;i<n-1;i++)
    {
    	for(int j=0;j<n-i-1;j++)
    	{
    		if(f[j].b>f[j+1].b)//比较芒果的数量 
    		{
    			g[j]=f[j];
    			f[j]=f[j+1];
    			f[j+1]=g[j];
			}
			if(f[j].b==f[j+1].b)//芒果树量相等时比较其他水果和的数量 
			{
				if(f[j].a+f[j].c+f[j].d+f[j].e<f[j+1].a+f[j+1].c+f[j+1].d+f[j+1].e)
				{
				g[j]=f[j];
    			f[j]=f[j+1];
    			f[j+1]=g[j];
				}
			}
		}
	}
	for(int i=n-1;i>=0;i--){//运用冒泡排序从小到大,所以反向输出 
	printf("%d %d %d %d %d",f[i].a,f[i].b,f[i].c,f[i].d,f[i].e);
	printf("\n");
}
}

                                               小叶子学英文

描述

小叶子现有一个非负整数n,它的任务是计算 n 的各位数的和 , 并且按英语输出总和中的每一个数字。

格式

输入格式

每次一个整数n,n<=10^100

输出格式

按要求输出。

样例

样例输入 Copy

12345

样例输出 Copy

one five		

 思路:用字符数组输出,用数组或字符数组来接收和,注意进位,字符需-‘0’在进行相加。

代码:

#include<stdio.h>
#include<string.h>
int  b[10000000];  //用于接收 
char a[10000000];   
int main()
{
	
	gets(a);
	int n=strlen(a);
	int sum=0;
	int g=0;
	for(int i=0;i<n;i++)
	{
		b[0]=b[0]+a[i]-'0';  
		int t=0;  
		while(b[t]>=10)  //当和大于10,进位 
         {
		 b[t+1]++;
		 b[t]%=10;
		 t++;
		 if(t>=g)
		 g=t;      //判断数组长度 
	}
}
	for(int i=g;i>=0;i--)
{
		if(b[i]==1)
	printf("one ");
	else
	if(b[i]==2)
	printf("two ");
	else
	if(b[i]==3)
	printf("three ");
	else
	if(b[i]==4)
	printf("four ");
	else
	if(b[i]==5)
	printf("five ");
	else
	if(b[i]==6)
	printf("six ");
	else
	if(b[i]==7)
	printf("seven ");
	else
	if(b[i]==8)
	printf("eight ");
	else
	if(b[i]==9)
	printf("nine ");
	else
	if(b[i]==0)
	printf("zero ");
}
}

 总结:今天巩固了结构体,快排,字符串知识,总体收获还行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值