杭電oj 2000-2011

32448 ワード

2000 ASCIIコードソート
 1 #include 
 2 
 3 int main(){
 4     char a,b,c,t;
 5     while(scanf("%c%c%c", &a, &b, &c)!=EOF){
 6         getchar();#       
 7         if(a>b){
 8             t = a;
 9             a = b;
10             b = t;
11         }
12         if(a>c){
13             t = a;
14             a = c;
15             c = t;
16         }
17         if(b>c){
18             t = b;
19             b = c;
20             c = t;
21         }
22         printf("%c %c %c
", a,b,c); 23 } 24 }

最初はgetchar()関数を追加しなかったのでエラーが発生しましたが、後で大物のwpを見て原因を知りました.ここでは大物の解釈を引用します.
初めてgetchar()関数を付けなかったので、結果が正しくなく、実行時、初めて3文字を入力して並べ替えが正しいのですが、後で入力すると出力が間違ってしまいます.他人の似たような問題の分析を見ることで、その理由が分かった.キーボードから入力した文字は、リターン記号を含むバッファに格納されます.「abcリターン」を入力すると、バッファには4文字「a」、「b」、「c」、「」が格納され、上記のプログラムにgetchar()がない場合、初めてバッファから3文字を抽出した後、1文字が残っている」と、次回3文字を入力すると、バッファに前回残ったリターン記号も加算され、処理に問題があります.getchar()はバッファから1つの文字を読み出し、バッファ内の文字を除去するだけであれば、付与式を使用する必要がなく、getchar()を直接使用します.はい、もちろん、m=getchar()などの付与式を使用してもよい.上記のプログラムでgetchar()を使用すると、3文字を入力するたびにリターン記号を吸収することができ、結果は正しいです.   
 
 
2001 2点間の距離の計算
 1 #include 
 2 #include 
 3 int main(){
 4     double x1,y1,x2,y2,d;
 5     while(scanf("%lf %lf %lf %lf", &x1, &y1, &x2, &y2)!=EOF){
 6         d= sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2));
 7         printf("%.2lf
", d); 8 9 } 10 }

 
2002球体積の計算
 1 #include 
 2 #define PI 3.1415927
 3 
 4 int main(){
 5     double x, v;
 6     while(scanf("%lf", &x)!=EOF){
 7         v = 4*PI*x*x*x/3;
 8         printf("%.3lf
", v); 9 } 10 }

 
2003絶対値を求める
 1 #include 
 2 
 3 int main(){
 4     double x,y;
 5     while(scanf("%lf", &x)!=EOF){
 6         y = x;
 7         if(y<0){
 8             y = -x;
 9         }
10         printf("%.2lf
", y); 11 } 12 }

 
2004絶対値を求める
 1 #include 
 2 
 3 int main(){
 4     int x;
 5     while(scanf("%d", &x)!=EOF){
 6         if(x<0 || x>100){
 7             printf("Score is error!
"); 8 } 9 if(x>=0 && x<60){ 10 printf("E
"); 11 } 12 if(x>=60 && x<70){ 13 printf("D
"); 14 } 15 if(x>=70 && x<80){ 16 printf("C
"); 17 } 18 if(x>=80 && x<90){ 19 printf("B
"); 20 } 21 if(x>=90 && x<=100){ 22 printf("A
"); 23 } 24 } 25 }

 
2005年の何日目ですか.
 1 #include 
 2 int main(){
 3     int a,b,c,i,days;
 4     int mon[12] = {31,0,31,30,31,30,31,31,30,31,30,31};
 5     while(scanf("%d/%d/%d", &a,&b,&c)!=EOF){
 6         if((a%4==0 && a%100 !=0) || (a%400 == 0)){
 7             days = 0;
 8             mon[1] = 29;
 9             for(i=0; i1; i++){
10                 days += mon[i];
11             }
12             days += c;
13             printf("%d
", days); 14 }else{ 15 days = 0; 16 mon[1] = 28; 17 for(i=0; i1; i++){ 18 days += mon[i]; 19 } 20 days += c; 21 printf("%d
", days); 22 } 23 } 24 25 }

 
2006奇数の積を求めます
 
#include 
int main(){
    int n, i ,mul;
    while((scanf("%d", &n))!=EOF){
        mul = 1;
        while(n--){
            scanf("%d", &i);
            if(i%2!=0){
                mul = mul*i;
            }
        }
        printf("%d
", mul); } }

 
2007平方和と立方和
これはまず2つの数を入力する大きさを判断しなければならない.そうしないと間違っている.
 1 #include 
 2 int main(){
 3     int n,m,squ,cub,i;
 4     while((scanf("%d %d", &n,&m))!=EOF){
 5         squ=0;
 6         cub=0;
 7         if(n<m){
 8             for(i=n;i<=m;i++){
 9                 if(i%2==0){
10                     squ += i*i;
11                 }else{
12                     cub += i*i*i;
13                 }
14             }
15             printf("%d %d
",squ,cub); 16 }else{ 17 for(i=m;i<=n;i++){ 18 if(i%2==0){ 19 squ += i*i; 20 }else{ 21 cub += i*i*i; 22 } 23 } 24 printf("%d %d
",squ,cub); 25 } 26 27 } 28 29 }

 
 
2008数値統計
 1 #include 
 2 int main(){
 3     int n,x,y,z;
 4     double i;
 5     while((scanf("%d", &n))!=EOF){
 6         if(n==0){
 7             continue;
 8         }else{
 9             x=0;
10             y=0;
11             z=0;
12             while(n--){
13                 scanf("%lf", &i);
14                 if(i<0){
15                     x += 1;
16                 }else if(i==0){
17                     y += 1;
18                 }else if(i>0){
19                     z += 1;
20                 }
21             }
22             
23             
24         }
25         printf("%d %d %d
", x,y,z); 26 } 27 return 0; 28 }

 
2009数列の和を求めます
 1 #include 
 2 #include 
 3 int main(){
 4     int m;
 5     double i,sum,n;
 6     while(scanf("%lf %d", &n,&m)!=EOF){
 7         sum = 0;
 8         while(m--){
 9             sum += n;
10             n = sqrt(n);
11             
12         }
13         printf("%.2lf
", sum); 14 } 15 }

 
2010水仙の数
最後に出力するときは最後にスペースが許されないので、最初の数の出力は後ろの数の出力とは違います.
 1 #include 
 2 
 3 int main(){
 4     int m,n,a,b,c,i,flag;
 5     while(scanf("%d %d",&m,&n)!=EOF){
 6         flag = 0;
 7         for(i=m;i<=n;i++){
 8             a=i/100;
 9             b=i%100/10;
10             c=i%10;
11             if(i==a*a*a+b*b*b+c*c*c){
12                 flag += 1;
13                 if(flag==1){
14                     printf("%d",i);
15                 }else{
16                     printf(" %d",i);
17                 }
18                 
19             }
20         }
21         if(flag==0){
22             printf("no");
23         }    
24         printf("
"); 25 26 } 27 }

 
2011多項式求和
 1 #include 
 2 
 3 int main(){
 4     int n,i;
 5     double a,sum,j;
 6     scanf("%d", &n);
 7     while(n--){
 8         sum = 0;
 9         scanf("%lf",&a);
10         for(i=1;i<=a;i++){
11             if(i%2==0){
12                 j = i;
13                 sum -= 1/j;
14             }else{
15                 j = i;
16                 sum += 1/j;
17             }
18         }
19         printf("%.2lf
", sum); 20 } 21 }

 
 
 
 
転載先:https://www.cnblogs.com/Ragd0ll/p/10395878.html