admin 管理员组文章数量: 1086019
pta——换硬币,买笔,计算天数
换硬币
#include<stdio.h>
int main()
{
int x,fen5,fen2,fen1;
int i,count=0;
scanf("%d",&x);
fen5=x/5;
fen2=x%5/2;
fen1=x%5%2;
if(fen5!=0&&fen2!=0&&fen1!=0)
{printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",fen5,fen2,fen1,fen5+fen2+fen1);count++;
}
for(i=0;i<(fen5-1);i++)
{if(fen5==0) break; //用来排除小于5的零钱,在此题中无用 fen5--;fen2 += 2;fen1++;if(fen5!=0&&fen2!=0&&fen1!=0){printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",fen5,fen2,fen1,fen5+fen2+fen1);count++;}fen2--;fen1 += 2;if(fen5!=0&&fen2!=0&&fen1!=0){printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",fen5,fen2,fen1,fen5+fen2+fen1);count++;}fen2--;fen1 += 2;if(fen5!=0&&fen2!=0&&fen1!=0){printf("fen5:%d, fen2:%d, fen1:%d, total:%d\n",fen5,fen2,fen1,fen5+fen2+fen1);count++;}
}
printf("count = %d",count);
return 0;
}
重复太多,待优化
我见过道比赛题是这个换硬币的升级版,面值不定,用这种穷举法就不行了。
下面是道跟给定面值换硬币思路一样的题
4088: 32.买笔方案
题目描述
期未来临了,班长小Q决定将剩余班费X元钱,用于购买若干支钢笔奖励给一些学习好、表现好的同学.已知商店里有三种钢笔,它们的单价为6元、5元和4元.小Q想买尽量多的笔(鼓励尽量多的同学),同时他又不想有剩余钱.请您编一程序,帮小Q制订出一种买笔的方案.
输入
输入一行一个整数代表钱数保证大于等于4且不为7
输出
输出只有一行三个数代表每种笔买的数量,如果有多种方案,选择4块钱的笔数量最多的方案
样例输入
4
样例输出
0 0 1
#include<bits/stdc++.h>
using namespace std;int main()
{int money,a=0,b=0,c=0;cin>>money;if(money%4==0){c += money/4;}else if(money%4==1){c += money/4 - 1;b++;}else if(money%4==2){c += money/4 - 1;a++; }else if(money%4==3){c += money/4 - 2;b++;a++;}cout<<a<<" "<<b<<" "<<c;return 0;}
计算天数
本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
输入样例1:
2009/03/02
输出样例1:
61
输入样例2:
2000/03/02
输出样例2:
62
#include<stdio.h>
int runnian(int n)
{int flag=0;if(n%4==0&&n%100!=0||n%400==0)flag=1;return flag;
}
int main()
{int n,y,m,d,t;scanf("%d/%d/%d",&n,&m,&d);if(runnian(n)){switch(m){case 1:t=0;break;case 2:t=31;break;case 3:t=60;break;case 4:t=91;break;case 5:t=121;break;case 6:t=152;break;case 7:t=182;break;case 8:t=213;break;case 9:t=244;break;case 10:t=274;break;case 11:t=305;break;case 12:t=335;break;} }else{switch(m){case 1:t=0;break;case 2:t=31;break;case 3:t=59;break;case 4:t=90;break;case 5:t=120;break;case 6:t=151;break;case 7:t=181;break;case 8:t=212;break;case 9:t=243;break;case 10:t=273;break;case 11:t=304;break;case 12:t=334;break;} }t += d;printf("%d",t);return 0;
}
感觉用的方法太笨了,希望大佬指点
前两天听翁凯老师讲的结构体时,灵光乍现
#include<stdio.h>
int runnian(int n)
{int flag=0;if(n%4==0&&n%100!=0||n%400==0)flag=1;return flag;
}
int main()
{int n,i,y,m,d,t=0,a[12]={31,28,31,30,31,30,31,31,30,31,30,31};scanf("%d/%d/%d",&n,&m,&d);for(i=2;i<=m;i++){t += a[i-2];}if(runnian(n)&&m>2) t++;t += d;printf("%d",t);return 0;
}
这样简便多了
本文标签: pta换硬币,买笔,计算天数
版权声明:本文标题:pta——换硬币,买笔,计算天数 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1693411615a220397.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论