The aim of this puzzle is to find the closest temperature to 0 in a list. It is pretty easy, and perfect to introduce a very commun and fundamental algorithm : the linear search.
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <limits.h>
// limits.h contains the macro INT_MAX which is the maximum capacity of an int
int main(int argc, char** argv)
{
int N;
scanf("%d\n", &N);
if (N == 0)
printf("0");
else {
char str[10000];
fgets(str,10000,stdin);
char *iter = str;
int T, len, min=INT_MAX;
/* Search the temperature of minimum absolute valueReads
Note a subtilty of the exercice : a temperature T>0 is prefered over -T*/
while (sscanf(iter, "%d%n", &T, &len) == 1) {
if (abs(T) < abs(min) || (T == -min && T > 0))
min = T;
iter+=len;
}
printf("%d", min);
}
return EXIT_SUCCESS;
/* sscanf takes a char* pointer on the string to read
%d means an integer is expected
%n means the nb of characters consumed is stored in len
which is then used to move forward in str
sscanf returns the number of item read (here 1 or in the end 0)*/
}
import java.util.*;
import java.math.*;
class Solution {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
if (N == 0)
System.out.println("0");
else {
int T;
int min = Integer.MAX_VALUE;
/* Search the temperature of minimum absolute valueReads
Note a subtilty of the exercice : a temperature T>0 is prefered over -T */
for (int i = 0; i < N; i++) {
T = in.nextInt();
if (Math.abs(T) < Math.abs(min) || (T == -min && T > 0))
min = T;
}
System.out.println(min);
}
}
}
N = int(input())
if N == 0:
print("0")
else:
min = None
for T in map(int, input().split()):
if (min == None) or (abs(T) < abs(min)) or ((T == -min) and (T > 0)):
min = T
print(min)