- 計算32位整數二進制表示中含有1的個數:
- #include <stdio.h>
- #include <stdlib.h>
- static int count1s(int /*32位整型數*/);
- int main(void)
- {
- int data;
- int count;
- printf("請輸入整型數:");
- scanf("%d", &data);
- count = count1s(data);
- printf("1的位數爲:%d/n", count);
- return 0;
- }
- static int count1s(int data)
- {
- int count = 0;
- while (data)
- {
- data = data & (data-1);
- count++;
- }
- return count;
- }
- /**
- * @acm中一道比較簡單的題目:一個正整型數組,各個元素互不相等,且每個元素都小 99,求某個元素是另外一個元素的兩倍這樣的對數有多少?
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define MAX_INTEGER 99
- int main(void)
- {
- int data_list[15+1]; /* data */
- int data_appear[MAX_INTEGER]; /* indicate whether the data appear */
- int count[100]; /* log the count */
- int list_index = 0;
- int i, j;
- memset(data_list, 0, sizeof(data_list)); /* reset */
- memset(data_appear, 0, sizeof(data_appear));
- memset(count, 0, sizeof(count));
- data_list[0] = 1; /* make it not -1 */
- while (1)
- {
- for (i=0; i<16; ++i)
- {
- scanf("%d", &data_list[i]);
- if (data_list[i] != 0 && data_list[i] > 0)
- {
- data_appear[data_list[i]] = 1;
- }
- else
- {
- break;
- }
- }
- if (data_list[0] == EOF) /* EOF is -1 */
- break;
- for (j=0; j<i; ++j)
- {
- if (data_list[j]%2 != 0)
- continue;
- if (data_appear[data_list[j]/2] == 1) /* fit */
- ++count[list_index];
- }
- ++list_index;
- memset(data_list, 0, sizeof(data_list)); /* reset */
- memset(data_appear, 0, sizeof(data_appear)); /* reset */
- }
- for (i=0; i<list_index; ++i)
- {
- printf("%d/n", count[i]);
- }
- return 0;
- }
幾個比較妙的算法
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.