#include #include #define NUM_LINES 7 // table of lines. '0' indicates P0, ':' indicates P10. const char* lines[NUM_LINES]={"058:", "0379","0246","01","1235","1478","169:"}; int which_line_has_points(char a, char b){ int i; for(i = 0 ; i < NUM_LINES ; i ++ ) if(strchr(lines[i], a) && strchr(lines[i], b)) return i + 1; return 0;// return 0 if no line shares points. } int points_form_triangle(char a, char b, char c) { int ab, bc, ac; ab = which_line_has_points(a,b); bc = which_line_has_points(b,c); ac = which_line_has_points(a,c); if(ab && bc && ac)// make sure every pair is on a line. if(ab != bc && ab != ac && bc != ac)// avoid zero area return 1; return 0; } int main(){ char a,b,c; int count = 0; for(a = '0' ; a <= ':' ; a ++ ) for(b = a ; b <= ':' ; b ++ )// start at 'a' to avoid redundant permutations for(c = b ; c <= ':' ; c ++ ) // start at 'b' for same reason count += points_form_triangle(a,b,c); printf("Number of triangles: %d\n", count); }