コード例 #1
0
ファイル: 10015.c プロジェクト: DavidToca/acm
int main()
{
	int n;

	sieve();
	while (scanf("%d", &n) == 1 && n != 0)
		printf("%d\n", survivor(n));

	return 0;
}
コード例 #2
0
ファイル: survivor.c プロジェクト: todivasudha/Algorithms
int survivor(int n, int flag, int j, int d)
{
	int i;
	if(flag == 1)
		d += pow(2, j-1);
	else if(flag == 2)
		d -= pow(2, j-1);
	if(n==1)
	{
			return (int)(pow(2, j) - d);
	}
	if(flag == 0)
	{
		for(i = 1; i <= n/2; i++)
			printf("%d ", i*2);
		if(n%2 !=0)	
			printf("1 ");
		j = 1;
		if(n%2 == 0)
			return survivor(n/2, 1, j, d);
		else
			return survivor(n/2, 2, j, d);
	}
	for(i = 1; i <= n/2; i++)
	{
		printf("%d ", (int)(pow(2, j)*2*i - d));
	}
	if(n%2 != 0)
	{
		printf("%d ", (int)(pow(2, j)*1 - d));
		j++;
		return survivor(n/2, 2, j, d);
	}
	else
	{
		j++;
		return survivor(n/2, 1, j, d);
	}
}
コード例 #3
0
ファイル: survivor.c プロジェクト: todivasudha/Algorithms
int main()
{
	int n, v, j = 0, d = 0, m, l;
	printf("\nEnter n : ");
	scanf("%d", &n);
	printf("The elimination order : ");
	v = survivor(n, 0, j, d);
	printf("\nThe survivor is : %d\n", v);
	m = log(n)/log(2);
	l = n - pow(2, m);
	v = 2*l + 1;
	printf("\nUsing the formula V(2^m + l) = 2*l + 1, the survivor is:  %d\n", v);
    return 0;
}
コード例 #4
0
ファイル: danger.c プロジェクト: apopa57/spoj
int main(void)
{
  assert (survivor(5) == 3);
  assert (survivor(10) == 5);
  assert (survivor(42) == 21);
  assert (survivor(66000000) == 64891137);

  assert (decode("05e0") == 5);
  assert (decode("01e1") == 10);
  assert (decode("42e0") == 42);
  assert (decode("66e6") == 66000000);

  char s[5];

  while (1)
    {
      scanf("%s\n", s);
      if (strcmp(s, "00e0") == 0) break;

      printf("%ld\n", survivor(decode(s)));
    }

  return 0;
}
コード例 #5
0
ファイル: danger.c プロジェクト: apopa57/spoj
long int survivor(const long int n)
{
  if (n <= 2) return 1;
  else if (n%2 == 0) return 2*survivor(n/2) - 1;
  else return 2*survivor((n-1)/2) + 1;
}