1. 程式人生 > >hdoj水題練習(一)

hdoj水題練習(一)

刷了不少劍指offer和leetcode練習演算法,都是隻要寫個函式,結果被要求格式的輸入輸出打敗!哭!

//hdoj1089 針對行數未知的輸入
#include <stdio.h>//要有.h
int main()
{
    int a, b;
    while(scanf("%d %d", &a, &b) != EOF)//注意英文標點 空格
            printf("%d\n", a+b);//注意換行符
    return 0;

}

//hdoj1090 針對行數已知的輸入
#include <stdio.h>
#include <iostream>//
using namespace std;//對於上一行來說這行是必需的!!!
int main()
{
        int a,b,n;
cin>>n;
for(int i=0;i<n;++i){
scanf("%d %d", &a, &b);//要求空格分隔,cin不能控制輸入格式,且效率低(使用緩衝區),但書寫簡便
cout<<a+b<<endl;
}
        return 0;

}

//hdoj1091 針對以0 0結尾的輸入
#include <stdio.h>
#include <iostream>//
using namespace std;//對於上一行來說這行是必需的!!!
int main()
{
        int a,b;
while(scanf("%d %d",&a,&b)&&(a||b)){
cout<<a+b<<endl;
}
        return 0;

}

/*scanf和printf的返回值

1.scanf的返回值
  1) 正整數,表示正確輸入引數的個數。例如執行 scanf("%d %d", &a, &b); 
      如果使用者輸入"3 4",可以正確輸入,返回2(正確輸入了兩個變數);
      如果使用者輸入"3,4",可以正確輸入a,無法輸入b,返回1(正確輸入了一個變數)。    
  2) 0,表示使用者的輸入不匹配,無法正確輸入任何值。如上例,使用者如果輸入",3 4",返回0。
  3) EOF,這是在stdio.h裡面定義的常量(通常值為-1),表示輸入流已經結束。

2.printf的返回值是輸出的字元數,例如,printf("1234")的返回值是4,而printf("1234\n")的返回值是5。

*/

//hdoj1092
#include <iostream>//
using namespace std;//對於上一行來說這行是必需的!!!
int main()
{
        int a,n,sum;
while(cin>>n,n){//n=0代表沒有要處理的數 不處理 結束迴圈
sum=0;
for(int i=0;i<n;++i){
cin>>a;
sum+=a;
}
cout<<sum<<endl;
}
        return 0;

}

//hdoj1094
#include<stdio.h>
#include <iostream>//
using namespace std;//對於上一行來說這行是必需的!!!
int main()
{
        int a,n,sum;
while(scanf("%d",&n)!=EOF){
sum=0;
for(int i=0;i<n;++i){
cin>>a;
sum+=a;
}
cout<<sum<<endl;
}
        return 0;

}

//hdoj1001
#include<stdio.h>
#include <iostream>//
using namespace std;//對於上一行來說這行是必需的!!!
int main()
{
        int n;
while(scanf("%d",&n)!=EOF){
cout<<(n%2==0?n/2*(1+n):(1+n)/2*n)<<"\n\n";
//中間加括號否則編譯錯誤 注意優先順序。
//注意除法時的型別轉換(直接/2.0 或 作顯式型別轉換 也不對 這是為啥?)。這裡請教!!!
//兩個換行符 <<endl<<endl 也可以。

}

        return 0;

}

//hdoj2000
#include<stdio.h>
int main()
{
        char a,b,c,t;
while(scanf("%c%c%c",&a,&b,&c)!=EOF){
if(a>b){t=b;b=a;a=t;}
if(b>c){t=c;c=b;b=t;}
if(a>b){t=b;b=a;a=t;}
printf("%c %c %c\n",a,b,c);
getchar();//用來接收回車!!!
}
        return 0;

}

//hdoj2001
#include<stdio.h>
#include<cmath>//
int main()
{
        float a,b,c,d,m;
while(scanf("%f %f %f %f",&a,&b,&c,&d)!=EOF){
m=sqrt(pow(c-a,2)+pow(d-b,2));
printf("%.2f\n",m);//保留兩位小數
//或cout<<setiosflags(ios::fixed)<<setprecision(2);//需要標頭檔案#include <iomanip>
getchar();//用來接收回車!!!
}
        return 0;
}
/*
setprecision是指設定輸出精度,當沒有cout<<setiosflags(ios::fixed)時,輸出格式是資料的有效位數。如果setprecision裡的引數小於整數位數,將以指數形式輸出。
setiosflags(ios::fixed)是指以固定的浮點顯示,當setiosflags(ios::fixed)和setprecision(n)兩個一起用時就表示保留n位小數輸出。這裡還要注意,每次輸出只要設定一次就行了,因為這兩個的作用範圍是後續物件,而不是僅對後一個物件起作用。

*/

//hdoj2002
#include<stdio.h>
#include<cmath>
#define PI 3.1415927

int main()
{
        double r,v;//float不行 要double(%lf)
while(scanf("%lf",&r)!=EOF){
v=4.0/3.0*PI*pow(r,3);
printf("%.3lf\n",v);
getchar();//用來接收回車!!!
}
        return 0;

}

//hdoj2003
#include<stdio.h>
#include<cmath>

int main()
{
double r;
while(scanf("%lf",&r)!=EOF){
printf("%.2lf\n",abs(r));
getchar();//用來接收回車!!!
}
return 0;

}

//hdoj2004
#include<stdio.h>
int main()
{
int r;
while(scanf("%d",&r)!=EOF){
if(r>=90&&r<=100){printf("A\n");}
else if(r>=80&&r<=89){printf("B\n");}
else if(r>=70&&r<=79){printf("C\n");}
else if(r>=60&&r<=69){printf("D\n");}
else if(r>=0&&r<=59){printf("E\n");}
else {printf("Score is error!\n");}
getchar();//用來接收回車!!!
}
return 0;

}

//hdoj2005
#include<stdio.h>
int main()
{
int a,b,c,d;
int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
while(scanf("%d/%d/%d",&a,&b,&c)!=EOF){
d=0;
for(int i=0;i<b-1;++i){
d+=m[i];
}
d+=c;
if(a%400==0||a%4==0&&a%100){//閏年
if(b>2)++d;
}
printf("%d\n",d);
getchar();//用來接收回車!!!
}
return 0;

}

//hdoj2006
#include<stdio.h>
#include<iostream>
using namespace std;
int main()
{
int n,m,a;
while(scanf("%d",&n)!=EOF){
m=1;
for(int i=0;i<n;++i){
cin>>a;
if(a%2) m*=a;
}
cout<<m<<endl;
}
return 0;
}