c語言練習篇(4)

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
#include <cstdio>
#include <algorithm>
using namespace std;

1.
//素數的判斷 (要記住基本思想)

int isPrime(int n){
     if(n <= 1) return 0;  //特判
     int sqr = (int)sqrt(1.0 * n);    //根號n
     for(int i = 2; i <= sqr; i++){
         if(n % i == 0) return 0;   //n是i的倍數,則n不是素數        
     }     
     
     return 1; 
}

int main(){
    int n;
    scanf("%d",&n);
    int flag = isPrime(n);
    printf("%d",flag);
    system("pause");
    return 0;    
}

2.
//數字黑洞

//我用了   把整數的每一個位數取出來的思想 

/*給定任一個各位數字不完全相同的四位正整數,
如果先把四個數字按非遞增排序,再按非遞減排序,
然後用第一個數字減第二個數字, 將得到一一個新的數字。一
直重複這樣做, 很快會停在有“數字黑澗”之稱的6174,這個神奇的數字也叫Kaprekar常數。

      例如,從6767 開始,將得到
      7766- 6677= 1089
      9810- 0189= 9621
      9621- 1269- 8352
      8532- 2358= 6174
      7641- 1467= 6174
*/


int cmp1(int a, int b){
    return a < b;       
}

int cmp2(int a, int b){
    return a > b;       
}

int main(){
    int n;
    int arr[4];
    int Max;
    int Min;
    
    scanf("%d",&n);
    
    while(n != 6174){
      for(int i = 0;i < 4;i++){
          arr[i] = n % 10; 
          n = n / 10;       
      }
      sort(arr,arr+4,cmp2);
      Max = arr[0]*1000 + arr[1]*100 + arr[2]*10 + arr[3];
    
      //printf("%d",Max);
      sort(arr,arr+4,cmp1);
      Min = arr[0]*1000 + arr[1]*100 + arr[2]*10 + arr[3];
    
      n = Max - Min;
      printf("%d-%d=%d\n",Max,Min,n);
    }
    
    printf("%d",n);
    system("pause");
    return 0;
} 
*/
    
3.

//輸入兩個正整數,求其最大公約數

//求最大公約數的輾轉相處遞歸寫法
int gcd(int a, int b){
    if (b == 0) return a;
    else return gcd(b, a%b);
} 

int main(){
    int m,n;
    while(scanf("%d%d",&m,&n) != EOF){
          printf("%d\n",gcd(m,n));                          
    }   
    printf("%d", 7%1);
    system("pause");
    return 0;
}
//最小公倍數=兩數的乘積/最大公約(因)數, 解題時要避免和最大公約(因)數問題混淆。 


4.
//有幾個PAT  147 頁  最主要對的就是計算這題的思想啊 
/*
字符串APPAPT中包含了兩個單詞“PAT",其中第一個PAT是由第二位(P)、第四位(A)和第六位(T)組成的:第二個PAT是由第三位(P)、第四位(A)和第六位(T)組成的。
現給定字符串,問一共可以形成多少個PAT?

解題思想:把每一個A左邊P的數*右邊T的個數之和,就是可以構成總共的PAT數。
*/
int main(){
    char str1[10000];
    //char str2[100000007];
    gets(str1);
    
    int count_P = 0;
    int count_T = 0;
    int sum = 0;
    int len = strlen(str1);
    
    for(int i = 0; i < len; i++){
           // printf("%c\n",str1[i]);
    }
    for(int i = 0; i < len; i++){
            
        if(str1[i] == 'A'){
           for(int j = 0; j < i; j++){
                if(str1[j] == 'P'){
                   count_P++;           
                }
           } 
           for(int j = i+1; j < len; j++){
                if(str1[j] == 'T'){
                   count_T++;           
                }
           }            
        }
        sum += count_P * count_T;
        count_P = 0;
        count_T = 0;
    }
    printf("%d\n",sum);
    system("pause");
    return 0;
}

                                         2020.5.2/週六
                                         by 922
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章