Q1編寫程序可計(jì)算如下分段函數(shù):
函數(shù)圖
int main() {
double x, y;
while (scanf("%lf", &x) != EOF) {
if (x > 0) {
double fz = sqrt(x) + exp(x);
double fm = 5 * x + 5;
double ans = fz / fm;
printf("%f\n", ans);
} else {
double PI = acos(-1.0);
double left = (double) 2 / 3 + sin(PI/3);
double ans = left * fabs(x);
printf("%f\n", ans);
}
}
return 0;
}
Q2. 從鍵盤輸入一個(gè)字符串嚣州,將此字符串按字符的ASCII碼值從小到大排序,并顯示排序后的字符串硝拧。
int main() {
char str[100010];
while (gets(str)) {
int len = strlen(str);
for (int i = 0; i < len; i++) {
for (int j = 0; j < len - i - 1; j++) {
if (str[j] > str[j + 1]) {
char temp = str[j];
str[j] = str[j + 1];
str[j + 1] = temp;
}
}
}
printf("%s\n", str);
}
return 0;
}
Q3. 編寫程序顯示2-1000之間的說有完數(shù)径筏,所謂完數(shù)是指,該數(shù)的各因子之和正好等于該數(shù)本身障陶。
int main() {
char str[10010];
while (gets(str)) {
int len = strlen(str);
bool flag = true;
if ((len >= 10) && (str[0] >= 'A' && str[0] <= 'Z') || (str[0] >= 'a') && str[0] <= 'z') {
int count[10] = {0};
for (int i = 0; i < len; i++) {
if (str[i] == '=' || str[i] == '*') {
flag = false;
break;
}
if (str[i] >= '0' && str[i] <= '9') {
int n = str[i] - '0';
count[n]++;
}
}
int sum = 0;
for (int i = 0; i < 10; i++) {
if (count[i] > 0) {
sum++;
}
}
if (sum < 2 || sum > 6) {
flag = false;
}
} else {
flag = false;
}
if (flag) {
printf("%s是合法用戶名\n", str);
} else {
printf("%s是不合法用戶名\n", str);
}
}
return 0;
}
Q5. 顯示5階的魔方陣
N階魔方陣是:元素為自然數(shù)1滋恬,2,…抱究,N2的N×N方陣恢氯,每個(gè)元素值均不相等,每行媳维、每列以及主酿雪、副對(duì)角線上各N個(gè)元素之和相等。
例如3階魔方陣為:
8 1 6
3 5 7
4 9 2
提示:從1開始侄刽,依次放置各自然數(shù),Dole Rob算法可以確定插入的每一個(gè)元素的下標(biāo):
1) 第一個(gè)位置在第一行的正中朋凉。
2) 若最近一個(gè)插入元素為N的整數(shù)倍州丹,則選下一行同列上的位置為新位置。
3) 新位置處于最近一個(gè)插入位置的右上方。
4) 若超出方陣上邊界墓毒,則選該列的在最后一行的位置吓揪,若超過右邊界,則選擇該行的在最左一列的位置所计。
參考示例的3階魔方陣柠辞,理解算法提示,并編程實(shí)現(xiàn)主胧。
int main() {
int a[5][5] = {0};
int row = 0, col = 5 / 2;
a[row][col]= 1;
for (int i = 2; i <= 25; i++) {
if ((i - 1) % 5 == 0) {
//N的整數(shù)倍在下一行的同一列
row++;
a[row][col] = i;
} else {
//新位置在右上方
row--;
col++;
if (row < 0) {
row = 4;
}
if (col > 4) {
col = 0;
}
a[row][col] = i;
}
}
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
printf("%2d ", a[i][j]);
}
printf("\n");
}
return 0;
}
Q6. 用遞歸實(shí)現(xiàn)叭首,顯示用1分、2分和5分的硬幣湊成1元踪栋,一共有多少種方法焙格。
int ans = 0;
int a[3] = {5, 2, 1};
void func (int m, int n) {
if (m == 0) {
ans++;
return;
}
for (int i = n; i < 3; i++) {
if (m >= a[i]) {
func(m - a[i], i);
}
}
}
int main() {
func(100, 0);
printf("%d", ans);
return 0;
}