1.编写一个程序,对输入的任意字符串,统计并输出其中每个英文小写字母在该字符串中出现的次数。
cpp
#include <stdio.h>
void getcount(char *str) {
int hash[26] = {0};
int i = 0;
while (str[i] != '\0') {
if (str[i] >= 'a' && str[i] <= 'z')
hash[str[i] - 'a']++;
i++;
}
for (int i = 0; i < 26; i++)
if (hash[i] != 0)
printf("%c:%d ", 'a' + i, hash[i]);
}
int main() {
char *str = "asdasdxxsaxAAAAAAA";
getcount(str);
return 0;
}
2.文法:N->N D|D,D->0|1|2|3|4|5|6|7|8|9,编写程序实现如下功能,对任意给定的串,若符合文法输出对应的整数值,否则输出错误。例如:2014输出2014,20Y14,输出错误。
cpp
#include <stdio.h>
int main() {
int N=0;
int i=0;
char str[100];
scanf("%s",str);
for(i; str[i]!='\0'; i++) {
if(str[i]>='0'&&str[i]<='9')
N=str[i]-'0'+N*10;
else {
printf("error\n");
break;
}
}
if(str[i]=='\0')
printf("%d\n",N);
return 0;
}
3.螺旋矩阵是整数的一种排列方式。编写程序生成井输出10X 10的螺旋矩阵。
cpp
#include <stdio.h>
#include <stdlib.h>
int main() {
int n;
scanf("%d",&n);
int **a=(int **)malloc(sizeof(int*)*n);
for(int i=0; i<n; i++)
a[i]=(int*)malloc(sizeof(int)*n);
int nums=1;
for(int i=0; i<=n/2; i++) {
for(int j=i; j<=n-i-1; j++)
a[i][j]=nums++;
for(int k=i+1; k<n-i-1; k++)
a[k][n-i-1]=nums++;
for(int j=n-i-1; j>i; j--)
a[n-i-1][j]=nums++;
for(int k=n-i-1; k>i; k--)
a[k][i]=nums++;
}
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++)
printf("%5d",a[i][j]);
printf("\n");
}
}
4.设有一个包含N个整数的集合S,编写函数求s的所有元素个数为M 的子集。
例如: N=4,S={1,2,3,4};若M=2,则输出结果为:
(1,2)(1,3)(1,4)(2,3)(2.4)(3,4)
cpp
#include <stdio.h>
void generateSubsets(int S[], int n, int subset[], int subsetSize, int index, int targetSize) {
if (subsetSize == targetSize) {
printf("{ ");
for (int i = 0; i < subsetSize; i++)
printf("%d ", subset[i]);
printf("}\n");
return;
}
for (int i = index; i < n; i++) {
subset[subsetSize] = S[i];
generateSubsets(S, n,subset, subsetSize + 1, i + 1, targetSize);
}
}
int main() {
int S[] = {1, 2, 3, 4};
int n=sizeof(S)/sizeof(int);
int subset[10];
int targetSize = 2;
generateSubsets(S, n, subset, 0, 0, targetSize);
return 0;
}