1、输入一个位数小于100的整数,判断它是不是回文,是输出yes,不是输出no。
#include<stdio.h>
#include<string.h>
int main()
{
int l,t,i,m=0;
char str[100];
scanf("%s",str);
l=strlen(str);
if (l%2==0) t=l/2-1;
else t=l/2-1;
for (i=0;i<=t;i++)
if (str[i]!=str[l-i-1]) m=1;
if (m==0) printf("Yes");
else printf("No");
return 0;
}
2、写一个程序,输出两个正整数,找出这两个数的最大公约数
#include<stdio.h>
int main()
{
int a = 0, b = 0, c = 0;
printf("请输入两个正整数:>");
scanf("%d %d", &a, &b);
c = (a > b) ? b : a; //将a、b中较小的值赋给c
while ((a % c != 0) || (b % c != 0)) //求最大公约数
{
c--;
}
printf("最大公约数是:%d\n", c);
return 0;
}
3、编程计算1+1/2+1/3+1/5+…+1/f(n)的值,其中n是键盘输入,f(n)为斐波那契数第n个值。
#include"stdio.h"
//递归求斐波那契数列
int fab(int n){
if(n==1||n==2)
return 1;
else return fab(n-1)+fab(n-2);
}
double _add(int n){
int i=1;
double total,sum;
total = 0,sum=0;
while(i<=n){
total = 1.0/fab(i);
sum += total;
i++;
}
return sum;
}
int main(){
int n;
printf("输入n:");
scanf("%d",&n);
printf("%lf\n",_add(n));
return 0;
}
4、输出1到1000之间,同时能被3和5不能被10整除的数。
#include<stdio.h>
int main()
{
int i;
for(i=100; i<1000; i++) // 从100到1000循环寻找满足条件的数
{
if(!(i%3) && !(i%5)&&(i%10)) // 如果该数能被3和5整除并且不能被10整除,则输出该数
printf("%d ", i); // 输出满足条件的数
}
}
5、 输入一个长度不超过100的字符串,输出出现次数最多和最少的字符,出现次数相同时,输出第一次出现的字符
#include"stdio.h"
#define MIN 100
void count(char str[],int num[]){
int i=0;
while(str[i]!='\0'){
num[(int)str[i]]++;
i++;
}
}
int find_max(int num[]){
int max,i,sub;
max=0;
for(i=0;i<256;i++){
if(max<num[i]){
max = num[i];
sub=i;
}
}
return sub;
}
int find_min(int num[]){
int min,i,sub;
min=MIN;
for(i=0;i<256;i++){
if(num[i]>0 && num[i]<min){
min = num[i];
sub=i;
}
}
return sub;
}
int main(){
char str[100];
int num[256]={0}; //统计字符个数
gets(str);
count(str,num);
printf("最多字符:%c\n",find_max(num));
printf("最少字符:%c\n",find_min(num));
return 0;
}
6、实现两个升序的数组合并,合并后数组仍然有序。
#include <stdio.h>
void MergeArr(int* a, int alen, int* b, int blen, int* c, int clen)
{
int i = 0;
int j = 0;
int k = 0;
while (i != alen && j != blen)
{
if (a[i] < b[j])
c[k++] = a[i++];
else
c[k++] = b[j++];
}
if (i == alen)
{
while (j != blen)
c[k++] = b[j++];
}
else
{
while (i != alen)
c[k++] = a[i++];
}
}
int main()
{
int a[4] = { 2,4,5,9 };
int b[4] = { 1,6,7,8 };
int c[8] = { 0 };
MergeArr(a, 4, b, 4, c, 8);
for (int i = 0; i < 8; i++)
{
printf("%d\t", c[i]);
}
return 0;
}
1、输入2个正整数m和n(1<=m,n<=1000),输出m和n之间所有满足各位数字的立方和等于它本身的数。(水仙花数)例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
#include<stdio.h>
int main()
{
int m,n,i,j;
scanf("%d %d",&m,&n);
if(m<1||m>1000||n<1||n>1000){
return 0;
}
for(i=m;i<n;i++)
{
int x,y,z;
x=i%10;
y=i/10%10;
z=i/100%10;
if(i==(x*x*x+y*y*y+z*z*z))
printf("%d\n",i);
}
return 0;
}
2、编写一个程序,找出最大素数,素数只能被1和自身除尽的数。
#include<stdio.h>
#include<math.h>
int main(){
int x,i,j;
printf("请输入取值范围:");
scanf("%d",&x);
for(i=x;i>1;i--){
for(j=2;j<=sqrt(x);j++){
if(i%j==0){
break;
}
if(j>sqrt(x)-1){
printf("范围内最大素数为%d",i);
return 0;
}
}
}
return 0;
}
3、编写程序计算1!+2!+3!+……+n!的值,其中n是键盘输入。
#include<stdio.h>
int main(){
int i,j,n;
int sum=1,total=0;
printf("请输入一个数n:");
scanf("%d",&n);
for (i=1;i<=n;i++){
sum = 1;
for (j=1;j<=i;j++){
sum *= j;
}
total += sum;
}
printf("%d",total);
return 0;
}
4、编写一个程序,输入一个长度不超过100的字符串,并删除字符串中重复的字符。
#include<stdio.h>
#include<string.h>
#define N 200
int main()
{
char a[N];
int i,j,n;
char k;
gets(a);
int f=strlen(a);
for(i=0;i<strlen(a);i++)
{for(n=0;n<i;n++)
if(a[i]==a[n])
{
{for(j=i;j<f;j++)
a[j]=a[j+1];
} i=i-1;
}
}
puts(a);
return 0;
}
5、假设一整箱数组存在若干正数和负数,现在通过某种算法使得数组的所有负数在正数的左边,且保证 负数和正数间元素相对位置不变,时间复杂度要求分为o(n),空间复杂度要求为o(1),不能使用辅助数组
分析:快排思想。两个指针分别从头和尾开始遍历直到两者交错,途中不满足的停下来交换。
#include<stdio.h>
void insertSort(int*A ,int size)
{
int minus=-1,plus=-1;
int tmp=0;
for(int i=0;i<size;i++)
{
if(minus==-1)
{
if(A[i]<0&& plus>=0)
{
minus=i;
}
if(A[i]>0&& plus<0)
{
plus=i;
}
}
if(minus>=0&& plus>=0)
{
tmp=A[plus];
A[plus++] = A[minus];
for (int k = minus; k> plus; k--)
{
A[k] = A[k -1];
}
A[plus]=tmp;
minus=-1;
}
}
}
int main() {
int A[]={2,1,-2,12,4,-2,-4,-6 };
int size=sizeof(A)/sizeof(int);
for(int i=0;i<size;i++)
{
printf("%d\t",A[i]);
}
printf("\n");
insertSort(A,size);
for(int i=0;i<size;i++)
{
printf("%d\t",A[i]);
}
}
6、给定一个存放正数的数组,重新排列数组使得数组左边为奇数,右边为偶数,且保证奇数和偶数之间元素相对位置不变。时空复杂度要求分别为:o(n)和o(1)。
#include<stdio.h>
void insertSort1(int*A ,int size)
{
int minus=-1,plus=-1;
int tmp=0;
for(int i=0;i<size;i++)
{
if(minus==-1)
{
if(A[i]%2!=0&& plus>=0)
{
minus=i;
}
if(A[i]%2==0&& plus<0)
{
plus=i;
}
}
if(minus>=0&& plus>=0)
{
tmp=A[plus];
A[plus++] = A[minus];
for (int k = minus; k> plus; k--)
{
A[k] = A[k -1];
}
A[plus]=tmp;
minus=-1;
}
}
}
int main() {
int B[]={1,3,4,5,6 ,9};
int s=sizeof(B)/sizeof(int);
for(int i=0;i<s;i++)
{
printf("%d\t",B[i]);
}
printf("\n");
insertSort1(B,s);
for(int i=0;i<s;i++)
{
printf("%d\t",B[i]);
}
getchar();
return 0;
}
版权声明:本文为daisyxyr原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。