c - 带有字符串的循环并输出到C中的唯一配置?
问题描述
所以我大概有一年没用过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
推荐阅读
- sql - ORA-01779 cannot modify a column which maps to a non key-preserved table
- php - 如何从文本中分离出特定的字符串(url 和后面的 10 个字符)并使用 PHP 将它们添加到数组中?
- python - 在 Lat Lang 中心 1000 英尺半径范围内获取 Lat & Lang
- google-slides-api - 使用基于过期的 API 从 Google 演示文稿中删除一张幻灯片
- javascript - 使用 Cheerio.js 抓取 IMDb 剧集 - 仅返回电视剧集的第一页
- php - PHP:加载另一个 php 文件源并替换字符串“ ”的所有实例
- python - 在 mpi (mpi4py) 中创建组通信器
- asterisk - How should I update FreePBX version 2.0.X to 14?
- python - 我需要如何配置 Keras 模型来预测图像?
- gitlab - 我可以恢复已删除分支的 GitLab 合并请求吗?