我可以在数组中找到重复的值,但是当我有两组以上的重复值时,程序将卡住。
因此,例如,如果我输入以下内容:
10 1 2 3 4 5 10 10 10 10 10
(请注意,第一个数字[10]表示数组中有多少个数字,并且假定所有数字将按升序排列)
我得到正确的分数输出
Run {10,10,10,10,10} scoring 50.
(runCount(5)* runNumber(10)= 50)
例如,如果数组中有两个以上的重复元素,则-
10 5 5 5 5 5 10 10 10 10 10
分数全都糊涂了
Run {5,10,10,10,10,5,5,5,5} scoring 45.
由于{5,5,5,5,5}的分数应低于{10,10,10,10,10},因此理想情况下,程序将打印分数最高的值。
Run {10,10,10,10,10} scoring 50.
如何使它仅使用最高值?我无法完全使break函数正常工作。
如果您有任何想法,请告诉我。我的代码如下。
我只能使用数组,循环和if / else
//Game that calculates the highest score based on array inputs
#include <stdio.h>
#define MAX_PLAYERS 13
#define TRIPLE 3
int main(void) {
int nPlayers, i, j, k;
int gameNumbers[MAX_PLAYERS];
int runCount, runCounter, runNumber, runScore;
int runScores[MAX_PLAYERS] = {0};
//read in numbers
scanf("%d", &nPlayers);
i = 0;
while (i < nPlayers) {
scanf("%d", &gameNumbers[i]);
i = i + 1;
}
//Calculates Run Scores
//A run is when there are duplicates of the same number in a row
runCounter=0;
runNumber=0;
runScore=0;
j=0;
for (i=(nPlayers-1); i>=1; i--) {
if(gameNumbers[i] - gameNumbers[i-1] == 0) { //compares highest number to previous number to find equality
runScores[j]=gameNumbers[i];
j++;
runCounter++;
runCount=(runCounter+1);
runNumber=(gameNumbers[i]);
runScore=(runCount*runNumber);
}
}
//Run Score
printf("runCounter:%d, runCount=%d, runNumber=%d, runScore=%d\n", runCounter, runCount, runNumber, runScore);
printf("runScores[]=");
i=0;
while (i<runCount) {
printf("%d ", runScores[i]);
i++;
}
printf("\n");
//Print run scores
printf("Run {%d", runNumber);
j=0;
while (j < runCounter) {
printf(",%d", runScores[j]); //loop prints remainder of the stored run scores array
j++;
}
printf("} scoring %d.\n", runScore);
return 0;
}
像这样:
#include <stdio.h>
#include <limits.h>
int main(void){
int n;
scanf("%d", &n);
int numbers[n];
for(int i = 0; i < n; ++i) {
scanf("%d", &numbers[i]);
}
int hi_score = INT_MIN, dupCount = 0 , theNumber;
for(int i = 0; i < n; ++i){
int counter = 0, score;
for(int j = i + 1; j < n && numbers[i] == numbers[j]; ++j){
++counter;
}
if(counter > 0){
score = (counter + 1) * numbers[i];
if(hi_score <= score){//= : when 4 4 4 4 4 5 5 5 5, 4 < 5
theNumber = numbers[i];
dupCount = counter + 1;
hi_score = score;
}
i += counter;
}
}
if(dupCount > 0){
int new_array[dupCount];
printf("Run {");
for(int i = 0; i < dupCount; ++i){
if(i)
putchar(',');
printf("%d", new_array[i] = theNumber);
}
printf("} scoring %d.\n", hi_score);
}
return 0;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句