- Katılım
- 23 Haziran 2016
- Mesajlar
- 3.103
- Makaleler
- 18
- Çözümler
- 12
Hackerrank'teki bir soruyu çözerken kodum zaman aşımına (terminated due to timeout) uğruyor. Bunun nasıl önüne geçebilirim?
www.hackerrank.com
Bu kodum bazı testleri geçerken diğer test durumlarını geçemedi. Sadece alt görevi tamamlayabildi. Bu yüzden sadece %60 puan alabildim.

Strange Counter | HackerRank
Print the value displayed by the counter at a given time, $t$.

Bu kodum bazı testleri geçerken diğer test durumlarını geçemedi. Sadece alt görevi tamamlayabildi. Bu yüzden sadece %60 puan alabildim.
C:
#include <assert.h>
#include <limits.h>
#include <math.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char* readline();
// Complete the strangeCounter function below.
long strangeCounter(long t) {
long firs_second=3, temp;
long i;
/* Burada temp'e firs_second atamasını yapmamın nedeni döngü içinde firs_second'ın ilk değerine ihtiyacım olması */
temp = firs_second;
/*
i=1;
while(i<t)
{
temp -=1;
if(temp == 0)
{
firs_second *=2;
temp = firs_second;
}
i++;
}
*/
for(i=1; i<t; i++)
{
temp -=1;
if(temp == 0) // temp değeri her sıfır olduğunda yeni bir azalma evresine girecek.
{
firs_second *=2;
temp = firs_second;
}
}
return temp;
}
int main()
{
FILE* fptr = fopen(getenv("OUTPUT_PATH"), "w");
char* t_endptr;
char* t_str = readline();
long t = strtol(t_str, &t_endptr, 10);
if (t_endptr == t_str || *t_endptr != '\0') { exit(EXIT_FAILURE); }
long result = strangeCounter(t);
fprintf(fptr, "%ld\n", result);
fclose(fptr);
return 0;
}
char* readline() {
size_t alloc_length = 1024;
size_t data_length = 0;
char* data = malloc(alloc_length);
while (true) {
char* cursor = data + data_length;
char* line = fgets(cursor, alloc_length - data_length, stdin);
if (!line) { break; }
data_length += strlen(cursor);
if (data_length < alloc_length - 1 || data[data_length - 1] == '\n') { break; }
size_t new_length = alloc_length << 1;
data = realloc(data, new_length);
if (!data) { break; }
alloc_length = new_length;
}
if (data[data_length - 1] == '\n') {
data[data_length - 1] = '\0';
}
data = realloc(data, data_length);
return data;
}
Son düzenleme: