hdoj-1014-C

原题链接:hdoj1014
好像用互质能解,留坑待填

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

int main()
{
    int step;
    int mod;
    int i;
    int temp;
    while(scanf("%d%d",&step,&mod)!=EOF){
        int seed=0;
        int flag[100000]={0};
        for(i=0;i<mod;i++){
            seed=(seed+step)%mod;
            flag[seed]=1;
        }
        temp=0;
        for(i=0;i<mod;i++){
            if(flag[i]==1)  
                temp=1;
            else
                temp=0;
        }
        if(temp)    printf("%10d%10d    Good Choice\n\n",step,mod);
        else    printf("%10d%10d    Bad Choice\n\n",step,mod);
    }
    return 0;
}
### HDOJ 2065 C语言解题思路及代码实现 #### 题目描述 HDOJ 2065 是一道关于字符串处理的经典题目。给定一段英文文本,要求将其中的单词顺序反转并保持标点符号位置不变。 #### 解题思路 为了高效解决这个问题,可以采用双端队列(deque)来辅助处理。具体来说: - 使用两个指针分别指向当前读取的位置和待输出的位置。 - 当遇到字母时将其压入栈中暂存。 - 若碰到非字母字符,则直接输出该字符,并依次弹出栈内的所有字母直至为空[^1]。 这种方法不仅逻辑清晰简单易于理解,同时也保证了较高的执行效率。 #### 代码实现 以下是基于上述思路编写的C语言版本解决方案: ```c #include <stdio.h> #include <ctype.h> #define MAX_LEN 1000 // 定义最大长度常量 int main() { char str[MAX_LEN], stack[MAX_LEN]; int top = -1; fgets(str, sizeof(str), stdin); for(int i = 0; str[i]; ++i){ if(isalpha(str[i])){ stack[++top] = str[i]; // 字母入栈 }else{ while(top != -1){ // 输出栈内所有字母 putchar(stack[top--]); } putchar(str[i]); // 输出非字母字符 } } while(top != -1){ // 处理最后一串连续字母 putchar(stack[top--]); } return 0; } ``` 此段代码通过`fgets()`函数获取输入字符串,并利用标准库中的`isalpha()`函数判断字符是否为英文字母。对于每一个非空白字符,如果是字母则加入到临时保存区域(即stack数组),如果不是字母而是其他符号,则先打印之前累积的所有字母再打印这个特殊符号。最后还需额外检查一次堆栈里是否有剩余未被处理过的字母序列[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值