gpt4 book ai didi

c - 使用字符串循环并输出到 C 中的独特配置?

转载 作者:行者123 更新时间:2023-11-30 16:19:33 25 4
gpt4 key购买 nike

所以我大约有一年没有使用C语言了,我的经历也是从0开始,没有计算机科学什么的知识。从字面上看,首先是从头开始编写 strlen 和分割空格等函数,基本上是用纯 C 语言创建我自己的库。

我现在想使用C来解决以下问题:我正在设计一款游戏,其中的单位有 4 个值。其中 3 个边的值分别为 x/y/z,具有任何可能的组合,第 4 个值是等于最重复符号的幂(如果 x = 3;幂 = 3/如果 x/y/z (= 1 ) 功率 = 1...)。我想要做的就是在独特的计数器中输出具有重复功率 1 2 和 3 的总单位数...我该怎么做?到目前为止我所拥有的是:

char U[] = "111";  

int result;

void P()

while (strcmp(U, "333") !=0);

while (char U[0] <= "3");

char U[0]++;

.....依此类推,所有值都达到 333。

我如何让它计算不同的功率级别单位,是否不仅可以表示功率级别 2 的总单位为 15,还可以表示采用什么配置(例如 1/1/3 或x/x/z)?

如果已经有一个涵盖此类问题的问题已得到解答,请原谅我的愚蠢问题,我只是不知道如何措辞......

编辑:事实上,我正在寻找的是一个函数(程序?因为我不想在编译时有输入),它循环字符串(1-3)中的每个值独立存储和将唯一配置 (1/1/2 2/1/1 1/2/1) 的总数输出为数字,同时计算包含相同值 1、2 或 3 次的配置总数。

最佳答案

如果我很理解你的代码

char U[] = "111";

void P()

while (char U[] <= "333");

while (char U[0] <= "3"

char U[0]++;

你实际上想要类似的东西:

char U[] = "111";

void P()
{
while (strcmp(U, "333") <= 0)
while (U[0] <= '3')
U[0]++;
}

无论如何,嵌套的while是没有用的,你可以拥有

char U[] = "111";

void P()
{
while (strcmp(U, "333") <= 0)
U[0]++;
}

您从P返回的值将是“411”,这是您期望的吗?

<小时/>

将所有内容放入程序中:

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

char U[] = "111";

void P()
{
while (strcmp(U, "333") <= 0)
U[0]++;
}

int main()
{
P();

puts(U);
return 0;
}

编译和执行:

pi@raspberrypi:/tmp $ gcc -pedantic -Wextra -Wall s.c
pi@raspberrypi:/tmp $ ./a.out
411
<小时/>

根据您的评论,如果我很理解您想要一个函数获取 3 个字母的字符串并返回其中任何字母重复的最大次数

可以是:

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

int count(const char * s)
{
if (s[0] == s[1])
return (s[0] == s[2]) ? 3 : 2;

return ((s[0] == s[2]) || (s[1] == s[2])) ? 2 : 1;
}

int main(int argc, char ** argv)
{
if ((argc != 2) || (strlen(argv[1]) != 3))
printf("usage: %s <string of 3 characters>", *argv);
else
printf("%d\n", count(argv[1]));

return 0;
}

编译和执行:

pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra s.c
pi@raspberrypi:/tmp $ ./a.out aze
1
pi@raspberrypi:/tmp $ ./a.out aaz
2
pi@raspberrypi:/tmp $ ./a.out aza
2
pi@raspberrypi:/tmp $ ./a.out azz
2
pi@raspberrypi:/tmp $ ./a.out aaa
3
<小时/>

再次编辑以完成 3 个字母中的 3 个字母(程序中的 1、2 或 3)的所有可能性:

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

int count(const char * s)
{
if (s[0] == s[1])
return (s[0] == s[2]) ? 3 : 2;

return ((s[0] == s[2]) || (s[1] == s[2])) ? 2 : 1;
}

int main()
{
char cnt[4] = { 0 }; /* index 0 not used */
char s[3];

for (int i = '1'; i <= '3'; ++i) {
s[0] = i;
for (int j = '1'; j <= '3'; ++j) {
s[1] = j;
for (int k = '1'; k <= '3'; ++k) {
s[2] = k;
cnt[count(s)] += 1;
}
}
}

printf("number of possibilities to have no repetition (count == 1) : %d\n", cnt[1]);
printf("number of possibilities to have 2 letters equals (count == 2) : %d\n", cnt[2]);
printf("number of possibilities to have all letters equals (count == 3) : %d\n", cnt[3]);

return 0;
}

编译和执行:

pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra s.c
pi@raspberrypi:/tmp $ ./a.out
number of possibilities to have no repetition (count == 1) : 6
number of possibilities to have 2 letters equals (count == 2) : 18
number of possibilities to have all letters equals (count == 3) : 3

关于c - 使用字符串循环并输出到 C 中的独特配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55598370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com