迴圈的三個語句;無聊oj題的一些必備知識點

vnalk發表於2020-11-17

迴圈

一開始學迴圈的時候分不清什麼初始值 執行條件 執行語句什麼的,就很煩,但其實也沒有什麼特別難的地方。反正每開啟一章都是新的,都難,學著學著就會了。

1.輸出整數的位數
(1)while語句

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int x;
    int n=0;
    scanf("%d",&x);
/*  n=n+1;
    x/=10;
  可以打也可以不打*/
    while (x>0){
        printf("here\n");
     //進行除錯
        n=n+1;
        x/=10;
        printf("x=%d,n=%d\n",x,n);
     //進行除錯:在程式適當的地方插入printf來輸出變數的內容
     //x/=10,是改變迴圈的條件
    }
    printf("%d\n",n);
    //計算機中的整數是有範圍的,最大十位
    return 0;
}

(2)do while語句

#include <stdio.h>
#include <stdlib.h>

int main()
{
    //do-while迴圈
    int x;
    scanf("%d",&x);
    int n=0;
    do{
        x/=10;
        n++;
    }while(x>0);
    printf("%d",n);
    return 0;
}

2.對數函式的計算
(其實也類似於得到整數位數啦,每次除以對數函式的底數就加一,加一加一最後得到的值就是對數函式的y值)

#include <stdio.h>


//log2x
#include <stdlib.h>

int main()
{
    int x;
    int ret=0;


    scanf("%d",&x);
    //x=128;
    int t=x;
    //找一個替罪羊t,讓它賦上x的值,
    while(t>1){
        t/=2;
        ret++;
    }//對數函式計算方法!!!
    printf("log2 of %d is %d",x,ret);


    return 0;
}

3.猜數遊戲
(包含內容:隨機數;在迴圈中用選擇結構)

#include <stdio.h>
#include <stdlib.h>


//猜數遊戲
int main()
{
    /*讓計算機隨機想一個數,記在變數number裡
    一個負責計次數的變數count初始化為0
    讓使用者輸入一個數字a
    count遞增(加一)
    判斷a和number的大小關係,如果a大,就輸出“大”,a小就輸出“小”
    如果a和number是不相等的(無論大還是小),程式轉回到第三步
    否則,程式輸出“猜中”和次數,然後結束
    */


    //迴圈的條件是a和number不相等

    srand(time(0));
    int number = rand()%100+1;
    //每次召喚   rand()就得到一個隨機的整數

	int count = 0;
	int a = 0;
	printf("我已經想好了一個1到100之間的數。");
	do {
		printf("請猜這個1到100之間數:");
		scanf("%d", &a);
		if ( a > number ) {
			printf("你猜的數大了。");
		} else if ( a < number ) {
			printf("你猜的數小了。");
		}
		count ++;
	} while (a != number);
	printf("太好了,你用了%d次就猜到了答案。\n", count);

    return 0;
}

4.for迴圈語句(就這一道題 把我多年對for的巢狀的困惑搞明白了)
就一個sb雞兔同籠問題 無語 那天晚上我想了兩個小時
其實執行的思路就是一個一個列舉吧

#include<stdio.h>
int main()
{
    int x,y;
    int a,b,c;

    scanf("%d%d",&x,&y);

    for(a = 1;a < x;a++){
        for(b=1;b < x;b++){
            for(c=1;c < x;c++){
                if((a+b+c==x)&&(2*a+4*b+6*c==y)){
                    printf("%d %d %d\n",a,b,c);
                    break;
                }
            }
        }
    }
    return 0;
}

附:新增一些小知識點(做題必備知識點)
1.閏年平年的判斷

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int n;
   scanf("%d",&n);
   if((n%4==0)&&(n%100!=0)||(n%400==0))
        printf("閏年");
   else
    printf("平年");

    return 0;
}

2.ascii碼

#include<stdio.h>
#include <stdlib.h>

int main()
{

 char a,b,c;
 int d,e;
 scanf("%c%c%c",&a,&b,&c);
 d=a-b;
 e=b-c;
 if(((a>='A' && a<='Z') || (a>='a' && a<='z'))&&((b>='A' && b<='Z') || (b>='a' && b<='z'))&&((c>='A' && c<='Z') || (c>='a' && c<='z')))
 {
  if((d==1&&e==1)||(d==-1&&e==-1)||(d==1&&e==-1)||(d==-1&&e==1))
    printf("Yes\n");
  else
     printf("No\n");
 }
 else
    printf("No\n");

 return 0;

}

3.最大公約數 最小公倍數

#include <stdio.h>
#include <stdlib.h>


int main() {

	int m,n,r,t=0;
	scanf("%d%d",&m,&n);
	if(n>m){
		r=m;
		m=n;
		n=r;
	}
	r=m%n;//最大公約數
	while(r!=0){
		m=n;
		n=r;
		r=m%n;
	}

	t=m*n/r;//最小公倍數
	printf("%d %d",r,t);
		return 0;
}

4.素數判斷

#include<stdio.h>
int main()
{
    int n,i,r=0;
    scanf("%d",&n);
    i=2;
    do{
        i++;
        r=n%i;
    }while((r!=0)&&(i<=n-1));
    if(i==n-1)
    printf("%d是素數",n);

    else if(i==n-1)
    printf("%d不是素數",n);
    return 0;
}

5.解一元二次方程
包含內容:開根號;實根虛根求法

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main()
{
    float a,b,c,d,y,z,x1,x2;
    scanf("%f%f%f",&a,&b,&c);

    d=b*b-4*a*c;
    y=sqrt(fabs(d))/(2*a);
    z=-b/(2*a);
    if(a==0){
        printf("The equation is not quadratic.");
    }
    else{
        if (d>0){
        x1=z+y;
        x2=z-y;
        printf("The equation has two distinct real roots: %.4f and %.4f.",x1,x2);
    }
        else if(d==0){
            x1=y+z;
        printf("The equation has two equal roots: %.4f.",x1);
    }
        else if(d<0){
        printf("The equation has two complex roots: %.4f+%.4fi and %.4f-%.4fi.",z,y,z,y);
    }
    }
    return 0;
}

6.並且&& 或者|| 的應用
一個sb乒乓球比賽問題

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int m,n;
    scanf("%d%d",&m,&n);

    if((m>=0 && m<=10) &&(n>=0 && n<=10))
        printf("no result");
    else if((m==11)&&(n>=0 && n<10))
        printf("A win");
    else if((n==11)&&(m>=0 && m<10))
        printf("B win");
    else if((m>=10 && m<=200)&&(n>=10 && n<=200)){
        if ((m==n)||(m==n+1)||(n==m+1))
            printf("no result");
        else if(m==n+2)
            printf("A win");
        else if(n==m+2)
            printf("B win");
        else if((m>n+2)||(n>m+2))
            printf("error");
    }
    else if(((m>11 && m<=200)&&(n>=0 && n<10))||((m>=0 && m<10) && (n>11 && n<=200)))
        printf("error");
    else if((m>200)||(n>200))
        printf("error");
    else if((m<0)||(n<0))
        printf("error");
    return 0;
}

7.冪函式的呼叫
math.h 是關鍵 然後就是pow(x,y)表示x的y次方


#include <stdio.h>
#include <math.h>

int main() {
int x ,y;
scanf("%d%d",&x,&y);
int result = pow(x,y);//這裡!冪函式的使用
printf("%d\n", result);

return 0;
}

相關文章