我有一个函数repsEqual
,它接受一个数组和整数,如果数组只包含出现在同一个数字中的相同顺序的数字,则返回1。否则返回0.
int repsEqual(int a[], int len, int n)
如果a
为{3,2,0,5,3}
且n
为32053
,则返回1
,因为该数组仅包含与其所在位置相同的数字位数数字。
如果a
为{0,3,2,0,5,3}
且n
为32053
,则返回1
;我们可以忽略前导零。
我试过这个
int repsEqual(int a[], int len, int n)
{
int len = sizeof(a)/sizeof(a[0]);
//storing elements in array
for(int i=0;i<len;i++)
{
scanf("%d", &a[i]); //eg storing:3 2 0 5 3
}
//asking user integer number and storing in next array
scanf("%d",&a2[num]);//eg 32053
}
现在我需要检查a2
元素是否与a1
的顺序相同,但不知道如何开始。
答案 0 :(得分:3)
这就是你想要的
int repsEqual(int a[], int len, int n)
{
for (int i = 0; i < len; i++)
{
if (a[len - i - 1] == n % 10)
n /= 10;
else
return 0;
}
//For cases where your number-length is longer than your array length
if (n != 0) return 0;
return 1;
}
首先你有阵列,比如a[5] = { 5, 2, 3, 1, 4}
基本上我所做的是从头到尾循环数组,那就是a[len - i - 1]
然后我用n
n%10
的{{1}}的最后一个字符检查它
例如,当n = 52314时,第一个 if语句检查是否(52314%10) 4 等于[4] 也是4
if 2个字符匹配,然后循环继续首先删除n的最后一个字符:52314/10 = 5231。
下一个循环将检查5231%10和a [3]
else 循环中断并返回0表示发现了不匹配
终于在检查了数组中的所有字符并且未找到不匹配之后,它将返回1,因为模式匹配
注意:一个函数应该只执行其名称所示的内容 在您的情况下,检查数组和整数是否具有相同的模式
在输入(数组,len和n)后,用户输入应放在其他地方之外,然后传入repsEqual
进行检查
答案 1 :(得分:0)
尝试将数字(n)向后与阵列匹配&#39; a&#39;。要做到这一点,你需要通过将剩余部分除以10来模拟来自&#39; n&#39;的最小数字。然后从&#39; n&#39;中删除最小数字。除以10。
int repsEqual(int a[], int len, int n)
{
int i;
int temp;
if (0 == len || NULL == a)
return 0; // no array, or elements, doesn't match a real number (n).
temp = n;
for (i = len - 1; i >= 0; --i)
{
if (a[i] != (temp % 10))
return 0; // remainder mismatch against array element.
temp = temp / 10; // removes the smallest digit.
}
return 1;
}
你的n上的模数10得到除以10的余数.IE 452 % 10 = 2
。然后除以10,我们删除最小的数字IE 452 / 10 = 45
。
答案 2 :(得分:0)
这似乎是一些功课,哈哈。无论如何,我给你一个快速/丑陋的样本开始。
#include <stdio.h>
int repsEqual(int a[],int len , int n)
{
char str[100];
sprintf(str, "%d", n);
int i;
int nonzeroIndex;
for(i=0; i<len; i++){
if (a[i] != 0)
break;
}
nonzeroIndex = i;
printf("nonzeroIndex is %d\n", nonzeroIndex);
for(i= nonzeroIndex; i <len; i++){
if (a[i] != str[i - nonzeroIndex] - 48) {
printf("diff at %d\n", i);
return 0;
}
}
return 1;
}
int main()
{
int a[5];
a[0] = 0;
a[1] = 2;
a[2] = 0;
a[3] = 5;
a[4] = 3;
int output = repsEqual(a, 5, 2053);
printf("result: %d\n", output);
}