輸入一串以逗號分隔的整數(每個數小於10000,數量小於100),要求過濾掉所有「包含數字7」或「能被7整除」的數值,最後輸出剩餘的數字,仍以逗號分隔。
1,7,56,77,87,2,45,42,97,9977
1,2,45
由於輸入數量不固定,無法直接使用整型陣列並以 \n 判斷結束(\n 是字元,無法存入整型陣列)。因此必須採用字串處理:先將整行輸入讀入字元陣列,再依照逗號切割並轉換為整數,最後逐一判斷。
num % 7 == 0) → 排除#include <stdio.h>
#include <string.h>
void main() {
char input[1000000];
int numbers[100], filtered[100];
int i, j, k, len, current_num = 0, flag = 0, count = 0;
gets(input);
len = strlen(input);
// 1. 字串解析:將逗號分隔的數字轉為整數陣列
for (i = 0, j = 0; i <= len; i++) {
if (input[i] >= '0' && input[i] <= '9') {
current_num = current_num * 10 + (input[i] - '0');
flag = 1;
} else if (flag == 0) {
continue; // 跳過非數字且非數字開始前的字元
} else {
numbers[j++] = current_num;
count++;
current_num = 0;
flag = 0;
}
}
// 2. 過濾邏輯
for (i = 0, j = 0; i < count; i++) {
int num = numbers[i];
if (num % 7 == 0) continue;
if (num % 10 == 7) continue;
if ((num / 10) % 10 == 7) continue;
if ((num / 100) % 10 == 7) continue;
if ((num / 1000) % 10 == 7) continue;
filtered[j++] = num;
}
// 3. 輸出結果
for (i = 0; i < j - 1; i++) {
printf("%d,", filtered[i]);
}
if (j > 0) printf("%d\n", filtered[j - 1]);
}
gets() 讀取整行(注意:實際開發建議用 fgets() 防止緩衝區溢位)。此題考驗字串處理、陣列操作與條件判斷,是C語言基礎練習的經典範例。