西北农林科技大学NWAFU-OJ习题合集二

点个关注不迷路~

如果有错误可以留言,会及时答复的~

(注意:没有main函数的建议走提交路线,避开露一手)

问题 AA: C语言实习题五——5.用指针实现查找二维数组中最大数及其位置

#include<stdio.h> // 引入标准输入输出库
int main() // 主函数
{
    int a[3][4]={0}; // 定义一个3行4列的整型数组a,并初始化为0
    for(int i=0;i<3;i++) // 外层循环,遍历数组a的每一行
    {
        for(int j=0;j<4;j++) // 内层循环,遍历数组a的每一列
        {
            scanf("%d",&a[i][j]); // 从标准输入读取一个整数,赋值给数组a的当前元素
        }
    }
    int m,n; // 定义两个整型变量m和n,用于存储最大值的行号和列号
    int b=-0x3f3f3f3f; // 定义一个整型变量b,初始化为一个较大的负数,用于存储最大值
    for(int i=0;i<3;i++) // 外层循环,遍历数组a的每一行
    {
        for(int j=0;j<4;j++) // 内层循环,遍历数组a的每一列
        {
            if(b<a[i][j]) // 如果当前元素大于b
            {
                b=a[i][j]; // 更新最大值b
                m=i; // 更新最大值所在的行号m
                n=j; // 更新最大值所在的列号n
            }
        }
    }
    printf("%d %d %d\n",n,m,b); // 输出最大值所在的列号、行号和最大值本身
  
    return 0; // 返回0表示程序正常结束
}

问题 AB: C语言实习题五——6.用指针实现子字符串提取

#include <stdio.h>
  
int main() {
    // 定义两个字符数组,分别用于存储源字符串和目标字符串
    char zfsour[100], zfdest[100];
    // 将源字符串的地址赋给指针变量pzfsour
    char* pzfsour = (char*)zfsour;
    // 初始化目标字符串的指针变量为NULL
    char* pzfdest = NULL;
    // 从标准输入读取源字符串
    scanf("%s", zfsour);
    // 定义两个整数变量m和n,用于存储需要截取的子串的长度
    int m, n;
    // 从标准输入读取m和n的值
    scanf("%d%d", &m, &n);
    // 将源字符串的指针向后移动m个位置,即跳过前m个字符
    pzfsour += m;
    // 将目标字符串的指针指向源字符串的第m+n个字符的位置
    pzfdest = pzfsour + n;
  
    // 定义一个整数变量i,用于记录已经复制到目标字符串的字符个数
    int i = 0;
    // 使用for循环,将源字符串中从第m个字符开始的n个字符复制到目标字符串中
    for (pzfsour, i; pzfsour < pzfdest; pzfsour++,i++) {
        // 将源字符串中的当前字符复制到目标字符串中
        zfdest[i] = *pzfsour;
    }
    // 在目标字符串的末尾添加空字符'\0',表示字符串结束
    zfdest[i] = '\0';
    // 将目标字符串输出到标准输出
    printf("%s\n",zfdest);
  
    return 0;
}

问题 AC: C语言实习题六——1.整数交换函数设计

#include<stdio.h>
   
// 定义一个交换函数,用于交换两个整数的值
void Swap(int m, int n)
{
    int t = m; // 将m的值赋给临时变量t
    m = n; // 将n的值赋给m
    n = t; // 将t的值(即原来的m的值)赋给n
}

int main()
{
    int a, b;
    scanf("%d%d", &a, &b); // 从标准输入读取两个整数a和b
    Swap(a, b); // 调用Swap函数交换a和b的值
    printf("%d %d\n", b, a); // 输出交换后的a和b的值
  
    return 0;
}

问题 AD: C语言实习题六——2.数字字符个数统计函数设计

#include<stdio.h>
#include<string.h>

// 定义一个函数,用于计算字符串中数字的个数
int Caculat(char *str)
{
    int t=0; // 初始化计数器t为0
    for(int i=0;i<strlen(str);i++) // 遍历字符串中的每个字符
    {
        if(str[i]>='0'&&str[i]<='9') // 如果当前字符是数字(ASCII码在48到57之间)
        {
            t++; // 计数器t加1
        }
    }
    return t; // 返回数字的个数
}

int main()
{
    char a[100]; // 定义一个字符数组a,用于存储输入的字符串
    fgets(a,100,stdin); // 从标准输入读取一行字符串,存储到字符数组a中
    printf("%d\n",Caculat(a)); // 调用Caculat函数计算字符串中数字的个数,并输出结果
    return 0; // 程序正常结束,返回0
}

问题 AE: C语言实习题六——3.排序函数设计

#include<stdio.h>

// 定义一个交换函数,用于交换两个整数的值
void Swap(int *p, int *q) {
    int t = *p;
    *p = *q;
    *q = t;
}

// 定义一个冒泡排序函数,用于对整数数组进行升序排序
void Buble(int a[], int n) {
    for (int i = n - 1; i > 0; i--) {
        for (int j = 0; j < i; j++) {
            if (a[j] < a[j + 1]) {
                Swap(&a[j], &a[j + 1]);
            }
        }
    }
}

int main() {
    int n;
    scanf("%d", &n); // 输入数组长度
    int a[100];
    for (int i = 0; i < n; i++) {
        scanf("%d", &a[i]); // 输入数组元素
    }

    Buble(a, n); // 调用冒泡排序函数对数组进行排序
    for (int i = 0; i < n; i++) {
        printf("%d ", a[i]); // 输出排序后的数组元素
    }
    printf("\n");

    return 0;
}

问题 AF: C语言实习题六——4.矩阵转置函数设计

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

// 定义一个函数,用于计算矩阵的转置
void matrixTranspose(int** arr, int n) {
    // 遍历矩阵的每一行
    for (int i = 0; i < n; i++) {
        // 遍历当前行的每一个元素
        for (int j = 0; j <= i; j++) {
            // 如果当前元素在对角线上,跳过
            if (i == j) {
                continue;
            }
            // 否则,交换当前元素和对角线上对应位置的元素
            else {
                int tmp = arr[i][j];
                arr[i][j] = arr[j][i];
                arr[j][i] = tmp;
            }
        }
    }
}

int main() {
    int n = 0;
    scanf("%d", &n); // 输入矩阵的大小
    int** arr = (int**)malloc(n * sizeof(int*)); // 分配内存空间
    for (int i = 0; i < n; i++) {
        arr[i] = (int*)malloc(n * sizeof(int)); // 分配内存空间
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &arr[i][j]); // 输入矩阵的元素
        }
    }
    matrixTranspose(arr, n); // 计算矩阵的转置

    for (int i = 0; i < n; i++) {
        int j = 0;
        for (; j < n-1; j++) {
            printf("%d ", arr[i][j]); // 输出矩阵的转置结果
        }
        printf("%d\n", arr[i][j]);
    }
    printf("\n");

    return 0;
}

问题 AG: C语言实习题六——5.求素数函数设计

#include<stdio.h>

// 定义一个函数,判断一个数是否为质数
int Tf(int n)
{
    // 如果n等于1,返回0,表示不是质数
    if(n==1)
        return 0;
    // 从2开始遍历到n-1,如果n能被其中任何一个数整除,返回0,表示不是质数
    for(int i=2;i<n;i++)
    {
        if(n%i==0)
            return 0;
    }
    // 如果以上条件都不满足,返回1,表示是质数
    return 1;
}

int main()
{
    int m,n;
    int sum = 0; // 用于记录质数的个数
    scanf("%d%d",&m,&n); // 输入两个整数m和n
    // 遍历从m到n的所有整数
    for(int i=m;i<=n;i++)
    {
        int a=Tf(i); // 调用Tf函数判断当前整数是否为质数
        if(a==1) // 如果当前整数是质数
        {
            printf("%d ",i); // 输出当前整数
            sum=sum+1; // 质数个数加1
        }
    }
    printf("\n"); // 换行
    printf("%d\n",sum); // 输出质数的个数

    return 0;
}

问题 AH: C语言实习题六——6.进制转换函数设计

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

// 定义一个函数,将十进制数转换为八进制数
int trans(int in, int count) {
    int i, temp, temp_1, temp_2, result = 0;
    temp = in;
    for (i = 0; i < count; i++) {
        // 取余数
        temp_1 = temp % 10;
        // 减去余数
        temp_2 = temp - temp_1;
        // 计算八进制数的每一位
        result = result + temp_1 * pow(8, i);
        // 更新临时变量
        temp = temp_2 / 10;
    }
    return result;
}

int main() {
    int in, in_i;
    scanf("%d", &in); // 输入十进制数
    in_i = in;
    int i = 0, count = 0;
    // 计算十进制数的位数
    while (in_i != 0) {
        i = in_i / 10;
        in_i = i;
        count++;
    }
    int result;
    result = trans(in, count); // 调用函数进行转换
    printf("%d", result); // 输出八进制数
    return 0;
}

问题 AI: C语言实习题六——7.求最大公约数函数设计

#include <stdio.h>

// 定义一个函数,用于计算两个整数的最大公约数
int DIV(int a, int b) {
    int Div = 0; // 初始化最大公约数为0
    int Multi = a * b; // 计算a和b的乘积
    int rem = 0; // 初始化余数为0
    rem = a % b; // 计算a除以b的余数

    // 使用辗转相除法求最大公约数
    while (rem) {
        a = b;
        b = rem;
        rem = a % b;
    }
    Div = b; // 将最大公约数赋值给Div

    return Div; // 返回最大公约数
}

int main() {
    int a, b;
    scanf("%d%d", &a, &b); // 从标准输入读取两个整数a和b
    int Div = DIV(a, b); // 调用DIV函数计算a和b的最大公约数

    printf("%d\n", Div); // 将最大公约数输出到标准输出
    return 0; // 程序正常结束
}

问题 AJ: C语言实习题六——8.对称数组判断

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

// 定义一个函数,用于检查矩阵是否对称
int exam(int n, int **arr) {
    int count = 0, i = 1;
    for (int j = 0; j < n; j++) {
        for (int k = 0; k < n; k++) {
            // 如果矩阵的某个元素与其转置位置的元素不相等,则说明矩阵不对称
            if (arr[j][k] != arr[k][j])
                i = 0;
        }
    }
    return i; // 返回结果,如果矩阵对称,则返回1,否则返回0
}

int main() {
    int n;
    scanf("%d", &n); // 输入矩阵的大小
    int **arr = (int **)malloc(sizeof(int *) * n); // 分配内存空间
    for (int i = 0; i < n; i++) {
        arr[i] = (int *)malloc(sizeof(int) * n); // 分配内存空间
    }
    // 输入矩阵的元素
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)
            scanf("%d", &arr[i][j]);
    }
    int r = 0;
    r = exam(n, arr); // 调用exam函数检查矩阵是否对称
    if (r == 1)
        printf("Yes"); // 如果矩阵对称,输出"Yes"
    else
        printf("No"); // 如果矩阵不对称,输出"No"
    // 释放内存空间
    for (int i = 0; i < n; i++) {
        free(arr[i]);
    }
    free(arr);

    return 0;
}

问题 AK: C语言实习题七——1. 结构体的定义与引用

#include <stdio.h>
 
// 定义一个名为Person的结构体
struct Person {
    char name[20];// 字符数组类型成员变量name,表示人物的姓名
    char str[20];
    int id;
    float salary;// 浮点型成员变量,表示人物的薪水
};
 
int main() {
    struct Person p1;
    scanf("%s%s%d%f",&p1.name,&p1.str,&p1.id,&p1.salary);
    
    // 创建并初始化第一个Person对象p1
    printf("%s\n", p1.name);      
    printf("%s\n", p1.str);       
    printf("%d\n", p1.id); 
    printf("%.2f\n", p1.salary); 
    return 0;
}

问题 AL: C语言实习题七——2.结构体数组的定义与引用

#include <stdio.h>

// 定义一个名为Person的结构体
struct Person {
    char name[20];// 字符数组类型成员变量name,表示人物的姓名
    char str[20];
    int id;
    float salary;// 浮点型成员变量,表示人物的薪水
};

int main() {
    struct Person p1;
    struct Person p2;
    struct Person p3;
    struct Person p4;
    struct Person p5;
    scanf("%s%s%d%f",&p1.name,&p1.str,&p1.id,&p1.salary);
    scanf("%s%s%d%f",&p2.name,&p2.str,&p2.id,&p2.salary);
    scanf("%s%s%d%f",&p3.name,&p3.str,&p3.id,&p3.salary);
    scanf("%s%s%d%f",&p4.name,&p4.str,&p4.id,&p4.salary);
    scanf("%s%s%d%f",&p5.name,&p5.str,&p5.id,&p5.salary);
    float arr[5]={0};
    arr[0]=p1.salary;
    arr[1]=p2.salary;
    arr[2]=p3.salary;
    arr[3]=p4.salary;
    arr[4]=p5.salary;

    float max = 0; // 初始化0
    for (int i = 0; i < 5; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    printf("%.2f\n",max);
    return 0;
}

问题 AM: C语言实习题八——测试Function Call

int Add2(int a,int b)
{
    return (a+b);
}

问题 AN: C语言实习题八——用户自定义sum

int sum(int (*f)(int), int start, int end){
    int i, s=0, t; // 定义变量i、s和t,其中s用于存储累加结果,t用于临时存储函数f的返回值
    if(start>end) // 如果start大于end,交换它们的值
    {
        i=start;
        start=end;
        end=i;
    }
    for(i=start; i<=end; i++){ // 遍历从start到end的整数
        t=f(i); // 调用函数f,将返回值赋给t
        s+=t; // 将t的值累加到s中
    }
    return s; // 返回累加结果s
}

问题 AO: C语言实习题八——单链表结点的阶乘和

int FactorialSum(List L){
    int i; // 定义一个整型变量i,用于循环计数
	int sum, totalsum = 0; // 定义两个整型变量sum和totalsum,分别用于存储阶乘值和阶乘和
	while(L != NULL){ // 当链表不为空时,执行循环
		sum = 1; // 将sum初始化为1,用于计算阶乘值
		for(i = L->Data; i >= 1; i--){ // 从链表中取出的数据开始,逐个乘以sum,直到1
			 sum = sum * i; // 计算阶乘值
		}
		totalsum += sum; // 将阶乘值累加到totalsum中
		L = L->Next; // 移动到链表的下一个节点
	}
	return totalsum; // 返回阶乘和
}

问题 AP: C语言实习题八——任务调度问题

void scheduler(int task[], int n, int system_task[], int user_task[])
{
    // 检查输入参数是否合法
    if (task == NULL || n < 0 || system_task == NULL || user_task == NULL)
    {
        return;  
    }
    int i = 0, j = 0, k = 0; 
    int temp = 0; 

    // 初始化system_task数组
    for (i = 0; i < n; i++)
    {
        system_task[i] = i; 
    }

    // 将user_task数组初始化为-1
    memset(user_task, 0xff, n * sizeof(int)); 

    // 对task数组进行冒泡排序,同时调整system_task数组的顺序
    for (i = 0; i < n - 1; i++)
    {
        for (j = 0; j < n - 1 - i; j++)
        {
            if (task[j] > task[j + 1])
            {
                temp = task[j + 1]; 
                task[j + 1] = task[j]; 
                task[j] = temp; 

                temp = system_task[j + 1]; 
                system_task[j + 1] = system_task[j]; 
                system_task[j] = temp; 
            }
        }
    }

    // 根据task数组的值,将system_task数组中的元素分配到user_task数组中
    for (i = 0, j = 0, k = 0; i < n; i++)
    {
        if (task[i] >= 0 && task[i] < 50)
        {
            system_task[j] = system_task[i]; 
            if (i > j)
            {
                system_task[i] = -1; 
            }
            j++; 
        }
        else if (task[i] >= 50 && task[i] <= 255)
        {
            user_task[k] = system_task[i]; 
            system_task[i] = -1; 
            k++; 
        }
        else
        {
            system_task[i] = -1; 
        }
    }
}

问题 AQ: C语言实习题八——ASCII字模文件

#include<stdio.h> // 引入标准输入输出库
#include<stdlib.h> // 引入标准库
#include<string.h> // 引入字符串处理库

int main() // 主函数
{
    int i, j, k, place, temp; // 定义整型变量i, j, k, place, temp
    char a[100]; // 定义字符数组a,用于存储输入的字符串
    int b[20][20]; // 定义二维整型数组b,用于存储文件中的数据
    unsigned char ch[10]; // 定义无符号字符数组ch,用于存储文件中的数据
    FILE *fp; // 定义文件指针fp
    gets(a); // 从标准输入读取一行数据到a中
    int *line = (int *)malloc(8 * strlen(a) * sizeof(int)); // 动态分配内存给整型指针line

    fp = fopen("ASC10x8.dic", "rb"); // 以二进制只读方式打开文件"ASC10x8.dic"
    for (i = 0; i < strlen(a); i++) { // 遍历字符串a中的每个字符
        place = (a[i] - 32) * 10; // 计算字符在文件中的位置
        fseek(fp, place, SEEK_SET); // 将文件指针移动到指定位置
        fread(ch, 1, 10, fp); // 从文件中读取10个字节的数据到ch中
        rewind(fp); // 将文件指针重置到文件开头
        for (j = 0; j < 10; j++) // 遍历ch中的每个字节
            b[i][j] = ch[j]; // 将字节数据存储到二维数组b中
    }
    for (i = 0; i < 10; i++) { // 遍历二维数组b中的每行
        for (j = 0; j < strlen(a); j++) { // 遍历字符串a中的每个字符
            temp = b[j][i]; // 获取二维数组b中的当前元素
            for (k = 7; k >= 0; k--) { // 将temp转换为二进制形式并存储到line中
                line[k + j * 8] = temp % 2;
                temp /= 2;
            }
        }
        for (j = 0; j < strlen(a) * 8; j++) { // 遍历line中的每个元素
            if (line[j] == 0) // 如果元素为0,则打印空格
                printf(" ");
            else // 如果元素为1,则打印井号
                printf("#");
        }
        printf("\n"); // 打印换行符
    }
    free(line); // 释放动态分配的内存
    fclose(fp); // 关闭文件
    return 0; // 返回0,表示程序正常结束
}

问题 AR: C语言实习题八——文本文件行统计

int GetLineInfo(FILE * fp, PLineInfo li)
{
    // 初始化计数器
    li->Uppers = 0, li->Lowers = 0, li->Numbers = 0, li->Separators =0, li->Others = 0;
    // 如果文件指针为空,返回错误代码1
    if (fp == NULL) {
        return 1;
    }
    char ch;
    int m = li->lineno; // 当前行号
    int n = 1; // 读取的行数
    // 将文件指针重置到文件开头
    rewind(fp);
    // 跳过前面的行
    while (n != m) {
        ch = fgetc(fp);
        if (ch == 10)
            n++;
    }
    // 读取当前行的第一个字符
    ch = fgetc(fp);
 
    // 遍历当前行的每个字符
    while (ch != '\n') {
        // 统计小写字母数量
        if (ch >= 97 && ch <= 122)
            li->Lowers++;
        // 统计大写字母数量
        else if (ch >= 65 && ch <= 90)
            li->Uppers++;
        // 统计数字数量
        else if (ch >= 48 && ch <= 57)
            li->Numbers++;
        // 统计分隔符数量
        else if ((ch == 32) || (ch == 9) || (ch == 10) || (ch == 44)
             || (ch == 46) || (ch == 59))
            li->Separators++;
        // 其他字符数量加1
        else {
            li->Others++;
            if (ch == EOF)
                return 0;
        }
        // 读取下一个字符
        ch = fgetc(fp);
 
    }
    // 返回成功代码0
    return 0;
}

问题 AS: 统计吉利数字

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
  int n, m, t = 0, i; // 定义变量n、m、t和i,其中t用于计数,i用于循环
  scanf("%d", &n); // 从标准输入读取一个整数n
  scanf("%d", &m); // 从标准输入读取一个整数m
  for (i = n; i <= m; i++) // 从n到m进行循环
  {
    if (i % 10 == 8) // 如果i的个位数是8
      t++; // t加1
    else if (i / 10 % 10 == 8) // 如果i的十位数是8
      t++; // t加1
    else if (i / 100 % 10 == 8) // 如果i的百位数是8
      t++; // t加1
    else if (i / 1000 % 10 == 8) // 如果i的千位数是8
      t++; // t加1
    else if (i / 10000 % 10 == 8) // 如果i的万位数是8
      t++; // t加1
  }
  printf("%d\n", t); // 输出t的值
  return 0; // 返回0表示程序正常结束
}

问题 AT: 寻找亲近的同学

#include <stdio.h>

int main(){
    int num,sum=0,b[1000]; // 定义变量num用于存储输入的整数,sum用于存储字符出现的次数,b用于存储字符出现的位置
    char ch; // 定义字符变量ch用于存储输入的字符
    char a[26]; // 定义字符数组a用于存储输入的字符串

    scanf("%d",&num); // 读取输入的整数
    getchar(); // 读取换行符

    int i=-1; // 初始化i为-1
    do{
        ++i; // i自增
        a[i]=getchar(); // 读取输入的字符并存入数组a
    }while(a[i]!='\n'); // 当读取到换行符时结束循环

    int j=0; // 初始化j为0
    do{
        ch=getchar(); // 读取输入的字符
        j++; // j自增
        int p;
        for(p=0;p<i;p++){ // 遍历数组a
            if(ch==a[p]){ // 如果输入的字符在数组a中出现过
                if(j!=num){ // 如果该字符不是最后一个字符
                    sum++; // sum自增
                    b[sum]=j; // 将该字符的位置存入数组b
                }
            }
        }
    }while(ch!='\n'); // 当读取到换行符时结束循环

    if(sum==0){ // 如果sum为0,表示没有出现次数为1的字符
        printf("Lonely Xiao Ming\n"); // 输出"Lonely Xiao Ming"
    }

    else { // 如果sum不为0,表示有出现次数为1的字符
        int p;
        for(p=1;p<sum;p++) // 遍历数组b,从第二个元素开始输出
            printf("%d ",b[p]); // 输出元素值和空格
        printf("%d\n",b[sum]); // 输出最后一个元素值
    }

    return 0; // 返回0表示程序正常结束
}

问题 AU: 城市电话号码

int CheckPhoneNum(char *num){
    int x, y, f = 0, len, i; // 定义变量x, y, f, len, i
    len = strlen(num); // 获取字符串长度

    for (i = 0; i < len; i++) { // 遍历字符串
        if (num[i] == '-') // 如果字符是'-'
            f++; // f加1
    }

    if (f == 1) { // 如果只有一个'-'
        for (i = 0; i < len; i++) { // 再次遍历字符串
            if (num[i] == '-') // 如果字符是'-'
                y = i; // 将y赋值为当前位置
        }
    } else if (f == 2) { // 如果有两个'-'
        for (i = 0; i < len; i++) { // 再次遍历字符串
            if (num[i] == '-') { // 如果字符是'-'
                x = i; // 将x赋值为当前位置
                break; // 跳出循环
            }
        }
        for (i = x + 1; i < len; i++) { // 从x+1开始遍历字符串
            if (num[i] == '-') // 如果字符是'-'
                y = i; // 将y赋值为当前位置
        }
    } else { // 如果有三个或以上的'-'
        return 1; // 返回1
    }

    if (f == 1) { // 如果只有一个'-'
        if (yes1(num, y, len - 1) == 1) { // 如果yes1函数返回1
            return 0; // 返回0
        } else return 1; // 否则返回1
    }

    if (f == 2) { // 如果有两个'-'
        if (yes2(num, x, y, len - 1) == 1) // 如果yes2函数返回1
            return 0; // 返回0
        else return 1; // 否则返回1
    }
    return 1; // 如果以上条件都不满足,返回1
}

int yes1(char *num, int x1, int x2) {
    int i;
    if (x1 != 3) return 0; // 如果x1不等于3,返回0
    if (x2 != 7) return 0; // 如果x2不等于7,返回0
    if (num[0] == '0') return 0; // 如果第一个字符是'0',返回0
    for (i = 0; i <= 7; i++) { // 遍历字符串
        if (i == 3) // 如果当前位置等于3
            continue; // 跳过本次循环
        if (num[i] < '0' || num[i] > '9') // 如果当前字符不是数字
            return 0; // 返回0
    }
    return 1; // 如果以上条件都不满足,返回1
}

int yes2(char *num, int x1, int x2, int x3) {
    int i;
    if (x1 > 4) return 0; // 如果x1大于4,返回0
    if (x2 - x1 != 4) return 0; // 如果x2减去x1不等于4,返回0
    if (x3 - x2 != 4) return 0; // 如果x3减去x2不等于4,返回0
    if (x1 == 0) return 0; // 如果x1等于0,返回0
    if (num[x1 + 1] == '0') return 0; // 如果x1+1位置的字符是'0',返回0
    for (i = 0; i <= x3; i++) { // 遍历字符串
        if (i == x1 || i == x2) // 如果当前位置等于x1或x2
            continue; // 跳过本次循环
        if (num[i] < '0' || num[i] > '9') // 如果当前字符不是数字
            return 0; // 返回0
    }
    return 1; // 如果以上条件都不满足,返回1
}

问题 AV: 删除子串

int delSubStr(char *src, char *sub, char *result)
{
    char *a, *b, *c; // 定义三个字符指针变量
    int i, j, sum = 0, k = 0, n = 0, m, s = 0; // 定义整型变量
    a = src; // 将源字符串赋值给指针a
    b = sub; // 将待删除子串赋值给指针b
    c = result; // 将结果字符串赋值给指针c

    for (i = 0; a[i] != '\0'; i++) // 遍历源字符串
    {
        if (a[i] == b[0]) // 如果当前字符与待删除子串的第一个字符相同
        {
            j = i; // 记录当前字符的位置
            for (k = 0; b[k] == a[j] && a[j] != '\0'; j++) // 遍历待删除子串
                k++; // 统计待删除子串的长度
            if (b[k] == '\0') // 如果待删除子串已经遍历完毕
            {
                sum++; // 计数器加1
                i = j; // 跳过待删除子串
            }
        }
        for (m = 0; b[m] != '\0'; m++) // 遍历待删除子串
            if (a[i + m] == b[m]) // 如果当前字符与待删除子串的对应字符相同
                s++; // 计数器加1
        if (s != strlen(b)) // 如果待删除子串的长度不等于计数器的值
            c[n++] = a[i]; // 将当前字符添加到结果字符串中
        if (s == strlen(b)) // 如果待删除子串的长度等于计数器的值
            i--; // 回退一位,继续遍历
        s = 0; // 重置计数器
    }

    c[n] = '\0'; // 在结果字符串末尾添加空字符
    return sum; // 返回删除子串的次数
}

问题 AW: 比压牌

#include <stdio.h>
#include <string.h>

// 定义一个函数,用于判断字符串a是否在字符串b中出现
int win(char *a, char *b, int la, int lb);

int main() {
    char a[100], b[10]; // 定义两个字符数组a和b,分别用于存储输入的字符串
    int la, lb; // 定义两个整型变量la和lb,分别用于存储字符串a和b的长度
    scanf("%s%s", a, b); // 从标准输入读取两个字符串
    la = strlen(a); // 计算字符串a的长度
    lb = strlen(b); // 计算字符串b的长度

    // 调用win函数,判断字符串a是否在字符串b中出现
    if (win(a, b, la, lb))
        printf("YES\n"); // 如果字符串a在字符串b中出现,输出"YES"
    else
        printf("NO\n"); // 如果字符串a不在字符串b中出现,输出"NO"

    return 0;
}

// 定义win函数,用于判断字符串a是否在字符串b中出现
int win(char *a, char *b, int la, int lb) {
    int i, j, sum; // 定义三个整型变量i、j和sum,用于循环计数和临时存储数据
    char ch; // 定义一个字符变量ch,用于存储字符串b的第一个字符
    if (lb == 1) { // 如果字符串b的长度为1
        for (i = 0; i < la; i++) { // 遍历字符串a的每一个字符
            if (a[i] > b[0]) // 如果当前字符大于字符串b的第一个字符
                return 1; // 返回1,表示字符串a在字符串b中出现
        }
        return 0; // 如果遍历完字符串a的所有字符都没有找到大于字符串b第一个字符的字符,返回0,表示字符串a不在字符串b中出现
    } else if (lb == 2 || lb == 3 || lb == 4) { // 如果字符串b的长度为2、3或4
        ch = b[0]; // 将字符串b的第一个字符赋值给变量ch
        for (i = 0; i < la; i++) { // 遍历字符串a的每一个字符
            if (a[i] > ch) { // 如果当前字符大于变量ch
                sum = 1; // 将计数器sum初始化为1
                for (j = i + 1; j < la; j++) { // 从当前字符的下一个字符开始遍历字符串a的每一个字符
                    if (a[j] == a[i]) // 如果当前字符等于上一个字符
                        sum++; // 计数器sum加1
                }
                if (sum >= lb) // 如果计数器sum大于等于字符串b的长度
                    return 1; // 返回1,表示字符串a在字符串b中出现
            }
        }
        return 0; // 如果遍历完字符串a的所有字符都没有找到大于变量ch的字符,或者计数器sum小于字符串b的长度,返回0,表示字符串a不在字符串b中出现
    } else { // 如果字符串b的长度大于4
        int aa[10] = {0}, bb; // 定义一个长度为10的整型数组aa和一个整型变量bb,用于存储临时数据
        bb = b[4] - '0'; // 将字符串b的第5个字符(下标为4)转换为数字,并赋值给变量bb
        for (i = 0; i < la; i++) { // 遍历字符串a的每一个字符
            aa[a[i] - '0'] = 1; // 将当前字符对应的数字在数组aa中的对应位置设为1
        }
        for (i = 1; i <= 9; i++) { // 遍历数组aa的每一个元素
            if (aa[i] == 1 && aa[i - 1] >= 1) { // 如果当前元素为1且前一个元素大于等于1
                aa[i] += aa[i - 1]; // 将当前元素加上前一个元素的值
            }
        }
        for (i = bb; i <= 9; i++) { // 从变量bb开始遍历数组aa的每一个元素
            if (aa[i] >= 5) // 如果当前元素大于等于5
                return 1; // 返回1,表示字符串a在字符串b中出现
        }
        return 0; // 如果遍历完数组aa的所有元素都没有找到大于等于5的元素,返回0,表示字符串a不在字符串b中出现
    }
    return 0; // 如果以上条件都不满足,返回0,表示字符串a不在字符串b中出现
}

问题 AX: 计算某年某月对应天数

#include<stdio.h>
void yue(int,int); // 声明函数yue,接收两个整数参数
int main()
{
    int y = 0,m = 0;
    scanf("%d %d",&y,&m); // 从标准输入读取年份和月份
    yue(y,m); // 调用函数yue,传入年份和月份
    return 0;
}

void yue(int y,int m)
{
    int a[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; // 定义一个数组a,存储每个月的天数
    if(y <= 1000 || y >= 3000){ // 判断年份是否在有效范围内
        printf("invalid year!"); // 输出无效年份提示
    }
    else if(m <= 0 || m >= 13){ // 判断月份是否在有效范围内
        printf("invalid month!"); // 输出无效月份提示
     }

    else if((y % 400 == 0||(y % 100 != 0 && y % 4 == 0))&& m == 2) // 判断是否为闰年二月份
         printf("29"); // 输出闰年二月份的天数
     else
         printf("%d",a[m]); // 输出其他月份的天数
}

问题 AY: 正负号与数字和

#include<stdio.h>
int main()
{
    int i; // 定义整型变量i
    int sum=0; // 定义整型变量sum并初始化为0
    scanf("%d",&i); // 从标准输入读取一个整数并赋值给i
    if(i<0) // 如果i小于0
    {
        printf("N"); // 输出字符"N"
        i=-i; // 将i取反
    }
    else printf("P"); // 否则输出字符"P"
    while(i>=10) // 当i大于等于10时执行循环
    {  
        sum+=i%10; // 将i除以10的余数加到sum上
        i/=10; // 将i除以10并向下取整
    } 
    sum+=i; // 将i加到sum上
    printf(",%d\n",sum); // 输出逗号和sum的值
    return 0; // 返回0表示程序正常结束
}

问题 AZ: 两数互素

#include <stdio.h>
int main(){
    int a,b,c;
    scanf("%d%d",&a,&b); // 从标准输入读取两个整数a和b

    while ((c=a%b)!=0){ // 当a除以b的余数不为0时,执行循环
        a=b; // 将b的值赋给a
        b=c; // 将余数c的值赋给b
    }
    
    if (b==1) printf("Yes."); // 如果b等于1,输出"Yes."
    else printf("No."); // 否则输出"No."
}

 

 

 

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ava实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),可运行高分资源 Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现的毕业设计&&课程设计(包含运行文档+数据库+前后端代码),Java实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值