free()
这可能很难理解,因为我不是母语为英语的人。 如果彼此相邻的数字相等,程序应该打印这些数字的序列号。
例如:
#include <stdio.h>
void main(){
int i, j, n;
int num[5];
int serial;
for(i=0; i<5; ++i){
scanf("%d",&num[i]);
if(num[i]==num[i-1])
serial=i;
else
continue;
}
printf("Serial number of equal numbers next to each other:%d. %d.", serial-1, serial);
}
输入:5 5 5 5 5 输出:0。1. 2. 3. 4.
我做了一些更改,现在打印两个相同数字的序列。 I:1 2 2 3 4 - O:1。2。 但如果所有数字都相同呢?
答案 0 :(得分:2)
// ...
// deal with index 0
if (num[0] == num[1]) printf("0. ");
// deal with indexes 1 .. N - 2
for (int k = 1; k < n - 1; k++) {
if ((num[k - 1] == num[k]) || (num[k] == num[k + 1])) {
printf("%d. ", k);
}
}
// deal with index N - 1
if (num[n - 2] == num[n - 1]) printf("%d. ", n - 1);
// ... possibly with a printf("\n"); somewhere
答案 1 :(得分:0)
你可以在不将数字存储在数组中的情况下解决这个问题,但是你必须在读取当前数字之前跟踪读取了多少相等的数字:
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
int i = 0; // running index
int prev = 0; // previously read number
int iprev = 0; // start of range of equal numbers previously read
int n; // currently read number
while (scanf("%d", &n) == 1) {
if (n != prev) {
if (i - iprev > 1) {
while (iprev < i) printf("%d\n", iprev++);
}
iprev = i;
prev = n;
}
i++;
}
if (i - iprev > 1) {
while (iprev < i) printf("%d\n", iprev++);
}
return 0;
}
只有在读取终止当前数字范围的数字后,才会考虑相等数字的延伸。当所有数字都不同时,该范围的大小为1,我们不打印任何内容。如果范围大于1,则打印所有相关指数。
因为您在阅读完最后一个号码后没有注意到更改,所以必须在主循环后单独检查最后一个范围。
答案 2 :(得分:0)
如果您可以在数组的[0]元素中放置非数字字符,则不需要对第一个元素进行不同的测试
int main (void)
{
/* non-numeric in position 0 of data array */
char myList[] = {'.','1','2','2','3','4','4','4','5','6','6'};
int listSz = strlen(myList) -1;
int n;
/* check everything except last */
for (n = 1; n < listSz; n++) {
if(( myList[n] == myList[n +1]) || ( myList[n] == myList[n -1] )) {
printf("%d . ", n);
}
}
/* check last */
if( myList[listSz] == myList[listSz -1] ) {
printf("%d", n);
}
printf("\n");
}
输出:2。 3。 5。 6。 7。 9。 10