c语言 周期

//问题:如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串的周期为k.例如,abcabcabc 以3为周期(同时它也以6为周期)
//输入一个长度不超过80的字符串,输出其最小的周期
#include<stdio.h>
#include<string.h>
const int maxn=100;
char s[maxn];
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%s",s);
        for(int i=1;i<=strlen(s);i++){
            int n=0,falg=0;
            //如果是周期 必须能被整除
            if(strlen(s)%i==0){
                for(int j=0;j<strlen(s);j++){
                    //每个周期内的值
                    if(s[j]==s[j%i]){
                        n++;
                        //当n等于strlen(s)时 就是结束
                        if(n==strlen(s)){
                            printf("%d",i);
                            //结束循环的标记
                            falg=1;
                            break;
                        }
                    }
                }
            }
            if(falg)
                break;
        }
        if(T)
            printf("\n\n");
        else
            printf("\n");
    }
    return 0;
}

转载于:https://www.cnblogs.com/qingtianBKY/p/6600244.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是一个简单的C语言EDF调度器示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_TASKS 10 typedef struct { int id; // 任务ID int period; // 周期 int deadline; // 最后期限 int wcet; // 最坏情况执行时间 int remaining_time; // 剩余时间 } Task; Task tasks[MAX_TASKS]; int num_tasks = 0; // 添加任务 void add_task(int period, int deadline, int wcet) { Task task; task.id = num_tasks + 1; task.period = period; task.deadline = deadline; task.wcet = wcet; task.remaining_time = wcet; tasks[num_tasks++] = task; } // EDF调度算法 int schedule() { int time = 0; int i, j; while (time < 1000) { // 模拟1000个时间步 int min_deadline = 0x7fffffff; int selected_task = -1; // 遍历所有任务,找到最早的最后期限 for (i = 0; i < num_tasks; i++) { if (tasks[i].deadline < min_deadline && tasks[i].remaining_time > 0) { min_deadline = tasks[i].deadline; selected_task = i; } } // 如果没有可用的任务,结束调度 if (selected_task == -1) { break; } // 执行选中的任务 tasks[selected_task].remaining_time--; printf("Time=%d, Executing Task %d\n", time, tasks[selected_task].id); // 如果任务已经完成,更新最后期限和剩余时间 if (tasks[selected_task].remaining_time == 0) { tasks[selected_task].deadline += tasks[selected_task].period; tasks[selected_task].remaining_time = tasks[selected_task].wcet; } time++; } return 0; } int main() { add_task(4, 4, 2); add_task(6, 6, 4); add_task(8, 8, 6); schedule(); return 0; } ``` 在这个示例代码中,我们定义了一个Task结构体,包含任务的id、周期、最后期限、最坏情况执行时间和剩余时间等信息。我们使用一个全局数组tasks来存储所有的任务,并通过add_task函数添加任务。 在EDF调度算法中,我们需要遍历所有任务,找到最早的最后期限,并把该任务作为当前要执行的任务。如果没有可用的任务,调度结束。我们使用一个while循环来模拟时间的流逝,每次循环中执行选中的任务,并更新任务的最后期限和剩余时间。如果任务已经完成,我们需要把最后期限更新为下一个周期,并把剩余时间重置为最坏情况执行时间。 在main函数中,我们添加了三个周期分别为4、6、8的任务,并调用schedule函数进行调度。 需要注意的是,这个示例代码并没有考虑实时性约束,只是简单地演示了EDF调度算法的基本原理。在实际应用中,我们需要根据任务的实时性约束来调整调度算法,并确保任务能够按时完成。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值