桂理理工大题

桂理理工大题_第1张图片

#include 
#include 

int getMax(int n);
int getMin(int n);
int range(int n);
static int count=1; //作为全局变量控制每次的序列号

int main(){
    int num;
    int i,j;
   do{
       printf("输入黑洞数:\n");
       scanf("%d",&num);
   }while(num<100||num>=1000);

   for(i=0;i<3;i++){
    int temp_num=range(num);
    if(temp_num==495||temp_num==0){ //最大值与最小值的差temp_num为495或者0为黑洞数
        break;
    }
    num=temp_num; //更新最新的num(判断黑洞数)
    count++; //序列号+1:黑洞判断次数+1
   }

}

//获取各位数字降序的最大值
int getMax(int n){
   int digits[3];
   digits[0]=n/100; //百位数
   digits[1]=n/10%10; //十位数
   digits[2]=n%10; //个位数

   //冒泡排序
   for(int i=0;i<3;i++){
       for(int j=0;j<3-i-1;j++){
           if(digits[j]<digits[j+1]){ //降序
              int temp=digits[j];
              digits[j]=digits[j+1];
              digits[j+1]=temp;
           }
       }
   }
   //计算最大值
   int max=digits[0]*100+digits[1]*10+digits[2];
   return max;
}

int getMin(int n){
  int digits[3];
  digits[0]=n/100; //百位
  digits[1]=n/10%10;//十位
  digits[2]=n%10; //个位

  //冒泡排序(升序)
  for(int i=0;i<3;i++){
      for(int j=0;j<3-i-1;j++){
          if(digits[j]>digits[j+1]){
             int temp=digits[j];
             digits[j]=digits[j+1];
             digits[j+1]=temp;
          }
      }
  }
  //计算最小值
  int min=digits[0]*100+digits[1]*10+digits[2];
  return min;
}

//得到最大值与最小值的差
int range(int n){
  printf("\n%d:%d-%d=%d\n",count,getMax(n),getMin(n),getMax(n)-getMin(n));  
  return getMax(n)-getMin(n);
}

桂理理工大题_第2张图片

#include 
#include 
//函数声明
char* str_copy(char s1[], char s2[]);

int main() {
    char s1[50];
    char s2[10];
    int count = 0;
    printf("输入s1字符串:\n");
    scanf("%s", s1);
    printf("输入s2字符串:\n");
    scanf("%s", s2);

    // 1.字符串的复制
    str_copy(s1, s2);
    // 2.输出字符串
    printf("复制后的结果为:\n");
    while (s1[count] != '\0') {
        printf("%c", s1[count++]);
    }
}

char* str_copy(char s1[], char s2[]) {
    int count = 0;
    int i = 0;
    while (s1[i++] != '\0'); //首先得到s1为结束的位置
        
    while (s2[count] != '\0') { //s2往s1后接
        s1[i-1] = s2[count++]; //这里注意:此时的i-1位为s1的'\0',需要在s1的'\0'处就替换
        i++;
    }
    s1[i+count-2]='\0';
    return s1;
}

在这里插入图片描述

#include 

//函数声明
int f(int n);
int main() {
    int num;
    printf("输入一个数:");
    scanf("%d", &num);
    int res = f(num);
    printf("result=:%d", res);
}
int f(int n) {
    if (n == 1) {
        return 1;
    }
    if (n == 0)
        return 0;
    return f(n - 1) + f(n - 2);
}

桂理理工大题_第3张图片

#include 

// 判断一个整数是否为质数
int isPrime(int num) {
    if (num <= 1) return 0;  // 小于等于1的数不是质数

    for (int i = 2; i * i <= num; i++) {
        if (num % i == 0) {
            return 0;  // 若能整除则不是质数
        }
    }

    return 1;  // 是质数
}

int main() {
    FILE* file = fopen("zhishu.dat", "w");  // 打开文件

    int count = 0;  // 统计质数个数

    printf("10000以内的质数:\n");
    fprintf(file, "10000以内的质数:\n");

    for (int i = 2; i <= 10000; i++) {
        if (isPrime(i)) {
            count++;
            printf("%-5d ", i);
            fprintf(file, "%-5d ", i);

            if (count % 10 == 0) {  // 每行输出10个质数
                printf("\n");
                fprintf(file, "\n");
            }
        }
    }

    printf("\n总共有%d个质数\n", count);
    fprintf(file, "\n总共有%d个质数\n", count);

    fclose(file);  // 关闭文件

    return 0;
}



你可能感兴趣的:(算法)