C 数组中彼此相邻的等号序列号
输入:5 输出:0。1.2.3.四, 我做了一些修改,现在它打印两个相等数字的序列。 I:1234-O:1。2. 但是如果所有的数字都相等呢?C 数组中彼此相邻的等号序列号,c,arrays,C,Arrays,输入:5 输出:0。1.2.3.四, 我做了一些修改,现在它打印两个相等数字的序列。 I:1234-O:1。2. 但是如果所有的数字都相等呢?/。。。 Input: 1 2 3 7 7 7 6; Output: 3. 4. 5. //处理索引0 如果(num[0]==num[1])printf(“0”); //处理索引1。。N-2 对于(int k=1;k1){ 而(iprev1){ 而(iprev
/。。。
Input: 1 2 3 7 7 7 6;
Output: 3. 4. 5.
//处理索引0
如果(num[0]==num[1])printf(“0”);
//处理索引1。。N-2
对于(int k=1;k
您可以在不将数字存储在数组中的情况下解决此问题,但在读取当前数字之前,必须跟踪已读取的相等数字的数量:
// ...
// 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
#包括
#包括
内部主(空)
{
int i=0;//运行索引
int prev=0;//以前读取的数字
int iprev=0;//以前读取的相等数字范围的开始
int n;//当前读取的数字
而(scanf(“%d”,&n)==1){
如果(n!=上一个){
如果(i-iprev>1){
而(iprev1){
而(iprev
只有在读取终止等值的当前范围的数字之后,才能考虑等量的数字。当所有数字都不同时,该范围的大小为1,我们不打印任何内容。如果范围大于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;
}
int main(无效)
{
/*数据数组的位置0中的非数字*/
字符myList[]={'.','1','2','2','3','4','4','5','6','6'};
int listSz=strlen(myList)-1;
int n;
/*检查所有东西,最后一个除外*/
对于(n=1;n
产出:2。3.5.6.7.9 . 10你的程序会做什么?表达式
num[i]==num[i+1]
会将数组的初始化部分与未初始化部分(其值不确定)进行比较,从而导致未定义的行为。提示:首先读取所有数字,然后检查它们。另外,如果n
等于或大于100
您将越界,并且再次具有未定义的行为。那么输出不应该是3、4
?是谢谢你的提醒:-)不幸的是,我不得不使用数组。在这种情况下,你已经有了答案。但是,如果您先读取数组,然后使用for
循环数组,而不是在循环时使用读取字符,则也可以对数组使用此策略。(您的原始代码同时读取和处理数组,这接近于在不存储数组的情况下读取当前值,只是您可以使用look back。)
#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;
}
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");
}