题目链接:http://acm.hdu.edu.cn/listproblem.php?vol=11
继续加油~
HDU 2031
进制转换会吧,C语言一开始就会学的
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int a,b;
int f[40];
while(~scanf("%d%d",&a,&b)){
int len=0;
if(a<0){
printf("-");
a=-a;
}
while(a){
f[++len]=a%b;
a/=b;
}
for(int i=len;i>=1;i--){
if(f[i]<10) printf("%d",f[i]);
else printf("%c",f[i]-10+'A');
}
printf("\n");
}
}
HDU 2032
简单的递推。这种题目可以在输入前全部预处理出来,不然每次询问的时候算一遍会浪费不必要的时间
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int f[40][40]={0};
for(int i=1;i<=30;i++){
f[i][1]=1;
f[i][i]=1;
}
for(int i=2;i<=30;i++){
for(int j=2;j<i;j++){
f[i][j]=f[i-1][j]+f[i-1][j-1];
}
}
int n;
while(~scanf("%d",&n)){
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
printf("%d%c",f[i][j],j==i?'\n':' ');
}
}
printf("\n");
}
}
HDU 2033
无
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int a,b,c,x,y,z;
int t;
while(~scanf("%d",&t)){
while(t--){
scanf("%d%d%d%d%d%d",&a,&b,&c,&x,&y,&z);
c+=z;
if(c>=60){
c-=60;
b++;
}
b+=y;
if(b>=60){
b-=60;
a++;
}
a+=x;
printf("%d %d %d\n",a,b,c);
}
}
}
HDU 2034
最后要留空格,搞不懂杭电哦,不过看题真的很重要哇 233
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int n,m;
int a[105],b[105];
int c[105];
while(~scanf("%d%d",&n,&m)){
if(n==0&&m==0) break;
for(int i=1;i<=n;i++) scanf("%d",a+i);
for(int i=1;i<=m;i++) scanf("%d",b+i);
int len=0;
for(int i=1;i<=n;i++){
int flag=1;
for(int j=1;j<=m;j++){
if(a[i]==b[j]){
flag=0;
break;
}
}
if(flag) c[++len]=a[i];
}
if(len==0){
printf("NULL\n");
}
else{
for(int i=1;i<=len;i++){
for(int j=1;j<=len-i;j++){
if(c[j]>c[j+1]){
int t=c[j];
c[j]=c[j+1];
c[j+1]=t;
}
}
}
for(int i=1;i<=len;i++){
printf("%d ",c[i]);
}
printf("\n");
}
}
}
HDU 2035
无
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m)){
if(!n&&!m) break;
int ans=1;
for(int i=1;i<=m;i++){
ans=(ans*n)%1000;
}
printf("%d\n",ans);
}
}
HDU 2036
这题居然我都不会写… 不过搜了一下还是看懂了的,这题有个公式的。
公式的具体证明看大佬博客(用了一点高数下册的知识)
https://blog.csdn.net/hemmingway/article/details/7814494
#include<stdio.h>
#include<math.h>
#include<string.h>
int main()
{
int n;
int x[105],y[105];
while(~scanf("%d",&n)&&n){
for(int i=1;i<=n;i++){
scanf("%d%d",x+i,y+i);
}
x[n+1]=x[1]; y[n+1]=y[1];
double ans=0;
for(int i=1;i<=n;i++){
ans+=(x[i]*y[i+1]-x[i+1]*y[i]);
}
printf("%.1lf\n",ans/2);
}
}
HDU 2037
贪心,先排个序(让结束时间越早的排在越前),这样我们每次都选结束时间尽量早的,那么后面那一大段时间剩下的就越多,选的肯定也越多,这就是贪心。写C语言的排序感觉好不爽
#include<stdio.h>
#include<math.h>
#include<string.h>
#define maxn 105
struct node
{
int l,r;
}f[maxn],t;
int main()
{
int n;
while(~scanf("%d",&n)&&n){
for(int i=1;i<=n;i++){
scanf("%d%d",&f[i].l,&f[i].r);
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n-i;j++){
if(f[j].r>f[j+1].r){
t=f[j];
f[j]=f[j+1];
f[j+1]=t;
}
else if(f[j].r==f[j+1].r){
if(f[j].l>f[j+1].l){
t=f[j];
f[j]=f[j+1];
f[j+1]=t;
}
}
}
}
int ans=0,tmp=0;
for(int i=1;i<=n;i++){
if(tmp<=f[i].l){
ans++;
tmp=f[i].r;
}
}
printf("%d\n",ans);
}
}
HDU 2038
???没有2038…
HDU 2039
这里还是坑,说的是正数不是整数,不要被样例欺骗的,要用double
#include<stdio.h>
#include<math.h>
#include<string.h>
#define maxn 105
int main()
{
int n;
scanf("%d",&n);
while(n--){
double a,b,c;
scanf("%lf%lf%lf",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a) printf("YES\n");
else printf("NO\n");
}
}
HDU 2040
无
#include<stdio.h>
#include<math.h>
#include<string.h>
#define maxn 105
int hhh(int b)
{
int sum=1;
for(int i=2;i<=sqrt(b);i++){
if(b%i==0){
sum+=i;
if(i!=sqrt(b)) sum+=b/i;
}
}
return sum;
}
int main()
{
int n;
scanf("%d",&n);
while(n--){
int a,b;
scanf("%d%d",&a,&b);
if(hhh(b)==a&&hhh(a)==b) printf("YES\n");
else printf("NO\n");
}
}
我弃坑了?