***

26993 ワード

ACM練習(一)
パスワードの問題
「China」を暗号化するには、元のアルファベットの後ろの4番目のアルファベットを元のアルファベットに置き換えるのが復号法則です.
例えば、アルファベット「A」の後ろの4番目のアルファベットは「E」であり、「E」は「A」に代わる.したがって、「China」は「Glmre」と訳される.
初期値を付与する方法でcl,c 2,c 3,c 4,c 5の5つの変数の値をそれぞれ,’C’,’h’,’i’,’n’,’a’とし,演算を経てc 1,c 2,c 3,c 4,c 5をそれぞれ‘G’,’l’,’m’,’r’,’e’として出力するプログラムを編成してください.
#include
int main()
{
    char ch1,ch2,ch3,ch4,ch5;
    scanf("%c",&ch1);
    scanf("%c",&ch2);
    scanf("%c",&ch3);
    scanf("%c",&ch4);
    scanf("%c",&ch5);
    printf("%c%c%c%c%c",ch1+4,ch2+4,ch3+4,ch4+4,ch5+4);
    return 0;
}

雌牛の問題–簡単な再帰
1頭の雌牛がいて、毎年年の初めに1頭の子牛を産んでいます.子牛は4年目から毎年年初にも子牛を産む.プログラミングして実現してn年目の時、何頭の雌牛がありますか?
         ,     “      ”       ,       。

1、          ,      ,                 。

2、     0
#include
#define N 55
int monther_cow[N];
void monther_cow2(int n);
 
int main()
{
   int input[N];
   monther_cow2(N);
   int i = 0;
    do
    {
        scanf("%d",&input[i]);
    }while(input[i++] != 0);
 
    for(int j = 0 ; j < i-1 ; j++)
    {
        if( input[j] < 4)
        {
            printf("%d
"
,monther_cow[input[j]]); } else { printf("%d
"
,monther_cow[input[j] - 1] + monther_cow[input[j] - 3] ); } } return 0; } void monther_cow2(int n)// { int i; for(i = 1 ; i <= n ; i++) { if( i < 4) { monther_cow[i] = i; } else { monther_cow[i] = monther_cow[i - 1] + monther_cow[i - 3]; } } }

文字列分類統計{{もじれつ:ぶんかつとうけい}}
英字、数字、スペース、その他の文字の個数を集計する行を入力します.
解一
#include
int main()
{
    int letter = 0,number = 0,blank = 0,others = 0,c;        //     、  、  、  
    while((c = getchar()) != '
'
){ if(c >= 'A' && c<='Z' || c >= 'a' && c <= 'z') // letter++; else if(c >= '0' && c <= '9') // number++; else if(c == ' ') // blank++; else // others++; } printf("%d %d %d %d
"
,letter,number,blank,others); return 0; }

解二
scanf()とgets()は、標準入力から文字列を受信するために使用できます.違いは次のとおりです.
get()関数:
1)gets()は標準入力装置から文字列を読み出し,リターンで読み出しを終了し,’0’で終わると,リターン記号’’’’’はバッファに残されていないものとして捨てられる.
2)スペースのある文字列を入力できます.
3)無限に読み取ることができ,上限を判断しないためgetsを使用すると安全ではなく,オーバーフローを引き起こす可能性がある.
scanf()関数:
1)scanf()は、スペースまたはリターン記号で読み取りを終了し、スペースまたはリターン記号はバッファに残ります.
2)スペースのある文字列は直接入力できません.
注意:scanf()関数は、スペース付き文字列を入力する方法について説明します.
scanf("%[^
]", a); //%[] , [^
] '
' , , 。
#include 
#include 
 
#define MAX 256
 
int main()
{
    char str[MAX];
 
    //1  gets                
    //gets(str);
    //2  scanf       ,          
    scanf("%[^
]"
, str); int len = strlen(str); int i; int num = 0; int abc = 0; int space = 0; int other = 0; for (i = 0; i < len; i++) { if (str[i] <= '9' && str[i] >= '0') num++; else if (str[i] <= 'z' && str[i] >= 'a') abc++; else if (str[i] == ' ') space++; else other++; } printf("%d %d %d %d
"
, abc, num, space, other); return 0; }

ステレオジオメトリ
題目の説明は円半径rを設けて、円柱の高さhは円周長C 1、円面積Sa、円球の表面積Sb、円球の体積Va、円柱の体積Vbを求めます.scanfでデータを入力して、計算結果を出力して、出力する時文字の説明を要求して、小数点の後の2桁の数字**(四捨五入)**を取ります.プログラムを作ってください.PI=3.14四捨五入に注意し、初めてやった時に穴があいた.
#include
int main()
{
   float r,h;
    scanf("%f %f",&r,&h);
   float C1,Sa,Sb,Va,Vb;
   C1=float(int(3.14*(2*r)*100))/100;//    float,          
   Sa=float(int(3.14*(r*r)*100))/100;
   Sb=float(int(4*3.14*(r*r)*100))/100;
   Va=float(int(1.333334*3.14*(r*r*r)*100))/100;
   Vb=float(int(h*3.14*(r*r)*100))/100;
   printf("C1=%0.2f
"
,C1); printf("Sa=%0.2f
"
,Sa); printf("Sb=%0.2f
"
,Sb); printf("Va=%0.2f
"
,Va); printf("Vb=%0.2f
"
,Vb); }

対照的に、学校のOJは本当に、ああ...一言では言い尽くせない.初心者にはこのC言語網を使うことをお勧めしますhttps://www.dotcpp.com/oj/problemset.html△全中国語のインタフェースは、比較的友好的です.テーマは比較的簡単です.討論プレートには多くの良質な問題解があります.しかし、欠点は私たちの学校が認めないことです...その他の有名な高校OJ POJ:poj.org
CodeForces: codeforces.com
HDUOJ: acm.hdu.edu.cn
VJudge: vjudge.net
ZOJ: acm.zju.edu.cn
UVA: uva.onlinejudge.org