2844. 生成特殊数字的最少操作

2844. 生成特殊数字的最少操作


题目链接:2844. 生成特殊数字的最少操作

代码如下:

class Solution 
{
public:
    int minimumOperations(string num) 
    {
        int res=0;
        bool found0=false,found5=false;
        for(int i=num.size()-1;i>=0;--i)
        {
            if(found0&&(num[i]=='0'||num[i]=='5')||
               found5&&(num[i]=='2'||num[i]=='7'))
            {
                return num.size()-i-2;
            }
            if(num[i]=='0') {found0=true;}
            else if(num[i]=='5')    {found5=true;}
        }
        return num.size()-found0;
    }
};
  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个 C++ 实现的密码生成程序,可以按照要求生成指定长度的密码,包含大写、小写字母、数字和其他符号,每类字符至少两个。 ```cpp #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { int length; cout << "Enter the length of the password: "; cin >> length; // 初始化随机数种子 srand(time(NULL)); // 定义包含可见字符的字符集合 const string charset = "0123456789" "abcdefghijklmnopqrstuvwxyz" "ABCDEFGHIJKLMNOPQRSTUVWXYZ" "!@#$%^&*()-_=+[]{}\\|;:'\",.<>/?"; // 定义密码数组并初始化为零 char password[length+1] = {0}; // 生成包含大写字母、小写字母、数字和其他符号的字符 password[0] = 'A' + rand() % 26; // 大写字母 password[1] = 'a' + rand() % 26; // 小写字母 password[2] = '0' + rand() % 10; // 数字 password[3] = charset[rand() % charset.length()]; // 其他符号 password[4] = charset[rand() % charset.length()]; // 其他符号 // 生成剩余的字符 for (int i = 5; i < length; i++) { password[i] = charset[rand() % charset.length()]; } // 输出密码 cout << "Your password is: " << password << endl; return 0; } ``` 该程序会要求用户输入密码长度,然后生成一个包含大写字母、小写字母、数字和其他符号的密码,并将其放入一个字符数组中输出。程序使用了 C++ 的随机数生成器来生成密码中的随机字符。 ### 回答2: 以下是一个用C语言编写的密码生成程序,根据要求生成指定长度的密码,并将密码放在一个数组中输出。程序确保密码包含大写字母、小写字母、数字和其他符号四类字符,且每类字符至少有两个。 ```c #include <stdio.h> #include <stdlib.h> #include <time.h> // 生成指定范围内的随机数 int generateRandomNumber(int min, int max) { return (rand() % (max - min + 1)) + min; } // 随机生成指定类型的字符 char generateRandomChar(char start, int range) { return start + generateRandomNumber(0, range); } // 生成密码 void generatePassword(char *password, int length) { // 分别存储四种类型的字符 char upperLetters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; char lowerLetters[] = "abcdefghijklmnopqrstuvwxyz"; char digits[] = "0123456789"; char symbols[] = "!@#$%^&*"; // 随机生成两个大写字母 password[0] = generateRandomChar(upperLetters[0], 25); password[1] = generateRandomChar(upperLetters[0], 25); // 随机生成两个小写字母 password[2] = generateRandomChar(lowerLetters[0], 25); password[3] = generateRandomChar(lowerLetters[0], 25); // 随机生成两个数字 password[4] = generateRandomChar(digits[0], 9); password[5] = generateRandomChar(digits[0], 9); // 随机生成两个其他符号 password[6] = generateRandomChar(symbols[0], 6); password[7] = generateRandomChar(symbols[0], 6); // 随机生成剩余字符 for (int i = 8; i < length; i++) { int randomCategory = generateRandomNumber(0, 3); switch (randomCategory) { case 0: password[i] = generateRandomChar(upperLetters[0], 25); break; case 1: password[i] = generateRandomChar(lowerLetters[0], 25); break; case 2: password[i] = generateRandomChar(digits[0], 9); break; case 3: password[i] = generateRandomChar(symbols[0], 6); break; } } // 打乱密码数组中的字符顺序 for (int i = 0; i < length; i++) { int randomIndex = generateRandomNumber(0, length - 1); char temp = password[i]; password[i] = password[randomIndex]; password[randomIndex] = temp; } } int main() { int length = 10; // 指定密码的长度 char password[length + 1]; // 声明一个数组来存储生成的密码 // 生成种子 srand(time(NULL)); // 生成密码 generatePassword(password, length); // 输出密码 printf("生成的密码为:"); for (int i = 0; i < length; i++) { printf("%c", password[i]); } printf("\n"); return 0; } ``` 该程序通过随机生成各种类型的字符,按照要求生成密码。同时,通过打乱生成的密码数组中的字符顺序,增加了密码的随机性和复杂度。 ### 回答3: 下面是用C语言编写的一个密码生成程序: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> // 生成指定范围内的随机数 int getRandomNumber(int min, int max) { return rand() % (max - min + 1) + min; } // 生成随机大写字母 char getRandomUppercaseLetter() { return getRandomNumber(65, 90); } // 生成随机小写字母 char getRandomLowercaseLetter() { return getRandomNumber(97, 122); } // 生成随机数字 char getRandomNumberCharacter() { return getRandomNumber(48, 57); } // 生成随机特殊字符 char getRandomSpecialCharacter() { return getRandomNumber(33, 47); } // 生成密码 void generatePassword(char password[], int length) { int uppercaseCount = 0, lowercaseCount = 0, numberCount = 0, specialCount = 0; for (int i = 0; i < length; i++) { if (i < 2 || uppercaseCount == 0) { password[i] = getRandomUppercaseLetter(); uppercaseCount++; } else if (i < 4 || lowercaseCount == 0) { password[i] = getRandomLowercaseLetter(); lowercaseCount++; } else if (i < 6 || numberCount == 0) { password[i] = getRandomNumberCharacter(); numberCount++; } else if (i < 8 || specialCount == 0) { password[i] = getRandomSpecialCharacter(); specialCount++; } else { int randomType = getRandomNumber(1, 4); switch (randomType) { case 1: password[i] = getRandomUppercaseLetter(); uppercaseCount++; break; case 2: password[i] = getRandomLowercaseLetter(); lowercaseCount++; break; case 3: password[i] = getRandomNumberCharacter(); numberCount++; break; case 4: password[i] = getRandomSpecialCharacter(); specialCount++; break; } } } password[length] = '\0'; } int main() { srand(time(0)); // 使用当前时间作为随机数种子 int length; printf("请输入密码的长度: "); scanf("%d", &length); char password[length + 1]; generatePassword(password, length); printf("生成的密码为:%s\n", password); return 0; } ``` 这个程序通过生成随机数的方式来生成包含大写字母、小写字母、数字和其他特殊字符的指定长度密码。首先确定每类字符至少有两个,然后在剩余的位置上随机选择四类字符生成密码。最后将生成的密码存储在字符数组中,并输出。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值