Zadania rekrutacyjne i ćwiczeniowe
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

78 lines
1.4 KiB

#include <stdio.h>
#include <math.h>
#include <string.h>
#define BIG_SIZE (400000)
void test(int actual, int expected);
// NOTE: since N is not given, we assume standard string termination (\0)
int solution(char* str)
{
int sum = 0;
while (str[0] == '0' // skip leading zeros
&& str[0] != '\n') { // handle zero-only strings
++str;
}
while (str[0] != '\0') {
if (str[0] == '0') {
sum += 1;
}
else {
sum += 2;
}
++str;
}
return sum ? sum -1 : 0;
}
int main()
{
test(solution("0"), 0);
test(solution("00000"), 0);
test(solution("1"), 1);
test(solution("011100"), 7);
test(solution("111"), 5);
test(solution("1111010101111"), 22);
char str[BIG_SIZE+1];
memset(str, '1', BIG_SIZE+1);
str[BIG_SIZE] = '\0';
test(solution(str), 799999);
printf("Done\n");
}
// -----
void test(int actual, int expected)
{
if (actual != expected) {
printf("Test failed, expected %i, got %i\n", expected, actual);
}
else {
printf("Test passed (expected %i, got %i)\n", expected, actual);
}
}
// alternative solution:
// int solution(char* str)
// {
// int sum = 0;
// int i = 0;
// while (str[i] == '0' && str[i] != '\n') {
// ++i;
// }
// while (str[i] != '\0') {
// if (str[i] == '0') {
// sum += 1;
// }
// else {
// sum += 2;
// }
// ++i;
// }
// return sum ? sum -1 : 0;
// }