Q1编写程序可计算如下分段函数:
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. 从键盘输入一个字符串,将此字符串按字符的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之间的说有完数,所谓完数是指,该数的各因子之和正好等于该数本身。
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阶魔方阵是:元素为自然数1,2,…,N2的N×N方阵,每个元素值均不相等,每行、每列以及主、副对角线上各N个元素之和相等。
例如3阶魔方阵为:
8 1 6
3 5 7
4 9 2
提示:从1开始,依次放置各自然数,Dole Rob算法可以确定插入的每一个元素的下标:
1) 第一个位置在第一行的正中。
2) 若最近一个插入元素为N的整数倍,则选下一行同列上的位置为新位置。
3) 新位置处于最近一个插入位置的右上方。
4) 若超出方阵上边界,则选该列的在最后一行的位置,若超过右边界,则选择该行的在最左一列的位置。
参考示例的3阶魔方阵,理解算法提示,并编程实现。
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的整数倍在下一行的同一列
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. 用递归实现,显示用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;
}