Lsylzx.sse

目录

1. 穷举

2. 递归

3. 屏幕输入输出

4.选择结构

5.循环结构

6.字符串

7.排序查找

1.用异或实现交换数字时,两个数字不能为相同,否则有一个交换结果为零
2.sse中下标位置从零开始计算
3.strcmp(str[1],str[2])
若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数

1. 穷举

1.m-n之间的素数和

#include<stdio.h>
#include<math.h>
#define re return
unsigned int InputNumber(char ch)
{
	printf("Please input the number %c(>1):",ch);
	int x;
	while(scanf("%d",&x)!=1||x<=1)
	{
		char c;
		while((c=getchar())!=EOF&&c!='\n');
		printf("The input must be an integer larger than 1!\n");	
		printf("Please input the number %c(>1):",ch);	
	}
	re x;
}

int IsPrime(unsigned int x)
{
	int sq=sqrt(x);
	for(int i=3;i<=sq;i++)
	if(!(x%i))re 0;
	
	re 1;
}

int PrimeSum(int m,int n)
{
	int ans=0;
	if(m==2){
		printf("2\n");
		ans=2;m=3;
	}
	
	for(int i=m;i<=n;i+=2)
	if(IsPrime(i))
	{
		printf("%d\n",i);
		ans+=i;
	}
	re ans;
}
int main()
{
    int m = 0,n = 0,sum = 0,i = 0;
    do
    {
        m = InputNumber('m');
        n = InputNumber('n');
    }while(m > n && printf("n must be not smaller than m! Input again!\n"));   //保证m<=n
    sum = PrimeSum(m,n);
    printf("sum of prime numbers:%d",sum);
    return 0;
}

2.梅森素数

#include<stdio.h>
#include<math.h>
#define re return
#define inc(i,l,r) for(int i=l;i<=r;i++)
int Get_ans(int cnt,long long x)
{
	if(x==1)re 0;
	long long sq=sqrt(x);
	for(int i=3;i<=sq;i+=2)
	if(!(x%i))re 0;
	
	re 1;
}
int main()
{
	int n,cnt=0;
	long long a=1;
	
	printf("Input n:\n");
	scanf("%d",&n);
	inc(i,1,n)
	{
		a<<=1;
		if(Get_ans(i,a-1))
		{
			cnt++;
			printf("2^%d-1=%lld\n",i,a-1);
		}
	}
	printf("count=%d\n",cnt);
	re 0;
}

2. 递归

1.猴子吃桃

#include<stdio.h>
#define re return
int main()
{
	int n;
	printf("Input days:\n");
	while((scanf("%d",&n))!=1||n<=0)
	{
		char c;
		while((c=getchar())!=EOF&&c!='\n');
		printf("Input days:\n");
	}
	
	int ans=1;
	for(int i=2;i<=n;i++)
		ans=(ans+1)<<1;
	printf("x=%d\n",ans);
}

2.倒序输出字符串

#include<stdio.h>
#include<string.h>
#define re return
int main()
{
	char s[1000];
	printf("input your string:\n");
	scanf("%s",s+1);
	int len=strlen(s+1);
	for(int i=len;i>=1;i--)
	printf("%c",s[i]);
}

3.回文数的形成

#include<stdio.h>
#include<string.h>
#define re return

int judge(long x,long y)
{
	while(x)
	{
		if(x%10!=y%10)re 0;
		x/=10;
		y/=10;
	}
	re 1;
}

void Get_rn(long x,long *y)
{
	*y=x%10;x/=10;
	while(x)
	{
		*y=(*y)*10+x%10;
		x/=10;
	}
}

int main()
{
	long n,rn,cnt=0;
	printf("please enter a number optionaly:");
	int x=scanf("%ld",&n);
	if(x==1&&n>=1)printf("The generation process of palindrome:\n");
	else 
	{
		printf("  input error, break.\n" );
		re 0;
	}
	while(1)
	{
		Get_rn(n,&rn);
		if(judge(n,rn))break;
		printf("   [%d]: %ld+%ld=%ld\n",++cnt,n,rn,n+rn);
		n=rn+n;
	}
	
	printf("Here we reached the aim at last !\n");
}

4.药品total

#include<stdio.h>
#define re return
#define inc(i,l,r) for(int i=l;i<=r;i++)
int main()
{
	int total,cnt=0;
	scanf("%d", &total);
	inc(i,0,30)
		inc(j,0,30-i)
	{
		int k=30-i-j;
		if(i+(j<<1)+5*k==total)
		{
			printf("%2d,%2d,%2d\n",i,j,k);
			cnt++;
		}
	}
	printf("%d\n",cnt);
	re 0;
} 

5.二行三列

#include<stdio.h>
#define re return

void dfs(int cnt,int *a,int *use)
{
	static int ans=0;
	if(cnt==7)
	{
		for(int i=1;i<=2;i++)
		if(a[i]>a[i+1]||a[i+3]>a[i+4])re ;
		
		for(int i=1;i<=3;i++)
		if(a[i]>a[i+3])re ;
		
		printf("\nNo.:%d",++ans);
		for(int i=1;i<=6;i++)
		if(i==1||i==4)printf("\n%3d",a[i]);
		else printf("%3d",a[i]);
		
		re;
	}
	
	for(int i=1;i<=6;i++)
	if(!use[i])
	{
		use[i]=1;
		a[cnt]=i;
		dfs(cnt+1,a,use);
		use[i]=0;
	}
}

int main()
{
	int a[10],use[10];
	for(int i=1;i<=6;i++)use[i]=0;
	printf("The possible table satisfied above conditions are:\n");
	dfs(1,a,use);
} 

3. 屏幕输入输出

1.大写字母转小写字母

#include<stdio.h>
#define re return
int main()
{
	printf("Press a key and then press Enter:");
	char c;
	scanf("%c",&c);
	printf("%c\n",c+'a'-'A');
	re 0;
 } 

2.小写字母转大写字母

#include<stdio.h>
#define re return
int main()
{
	char c;
	printf("Please input a low-case letter from keyboard:");
	scanf("%c",&c);
	c+='A'-'a';
	printf("The capital letter and its ASCII value are:%c and %d.\n",c,c);
	re 0;
 } 

3.找出前后驱字符并输出ASCAL码值

#include<stdio.h>
#define re return
int main()
{
   char c;
   printf("Enter a character:");
   scanf("%c",&c);
   printf("%c %c %c\n",c-1,c,c+1);
   printf("%d %d %d\n",c-1,c,c+1); 
   re 0;
} 

4.管理系统

#include<stdio.h>
int main()
{
   printf("=======大学信息管理系统======= \n");
   printf("------------------------------\n");
   printf("1. 办公室管理     5. 财务管理 \n");
   printf("2. 教务管理       6. 图书管理 \n");
   printf("3. 科研管理       7. 设备管理 \n");
   printf("4. 人事管理       8. 后勤管理 \n");
   printf("0. 退出系统\n");
   printf("------------------------------\n");
   printf("请您在上述功能中选择(0——8):\n");
   return 0;
} 

4. 选择结构

1.判断整数的正负

#include<stdio.h>
#define re return
int main()
{
	int n;
	printf("Enter n:");
	scanf("%d",&n);
	if(n>0)printf("+\n");
	else if(n==0) printf("this number has no sign\n");
	else printf( "-\n" );
	re 0;
 } 

2.成绩评定

#include<stdio.h>
int main()
{
	int n;
	printf("Please enter score:");
	scanf("%d",&n);
	if((n<0||n>100))
	{
		printf("Input error!");
		return 0;
	}
	
	int x=n;
	n/=10;
	switch(n)
	{
		case 6:printf("%d--D\n",x);break;
		case 7:printf("%d--C\n",x);break;
		case 8:printf("%d--B\n",x);break;
		case 9:printf("%d--A\n",x);break;
		case 10:printf("%d--A\n",x);break;
		default:printf("%d--E\n",x);
	}
	return 0;
}

5. 循环结构

6. 字符串

1.第一国家名

#include<stdio.h>
#define re return
void sswap(char **a,char **b)
{
	char *tmp=*a;
	*a=*b;
	*b=tmp;
}

int cmp(char *p,char *q)
{
	if(*p>*q)re 1;
	else if(*p<*q)re 0;
	while((*p++!='\0')&&(*q++!='\0'))
	{
		if(*p>*q)re 1;
		else if(*p<*q)re 0;
	}
	if(*p=='\0')re 0;
	re 1;
}
int main()
{
	//freopen("in.txt","r",stdin);
	printf("Input five countries' names:\n");
	char str[10][100]; 
	for(int i=1;i<=5;i++)gets(str[i]);
	
	int order[10];
	for(int i=1;i<=5;i++)order[i]=i;
	
	for(int i=1;i<=4;i++)
	for(int j=i+1;j<=5;j++)
	if(cmp(str[order[i]],str[order[j]]))
	{
		order[i]^=order[j]^=order[i]^=order[j];
	} 
	
	printf("Input five countries' names:\n%s\n",str[order[1]]);
	return 0;
 } 

2.十个字符串快排(含空格读入)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>

void Input(char str[][100],int n)
{
	for(int i=1;i<=n;i++)scanf("%[^\n]%*c",str[i]);
}

int cmp(const void *a,const void *b)
{
	return (strcmp((char *)a,(char *)b));
}
void Sort(char str[][100],int n)
{
	qsort(str[1],n,sizeof(str[0]),cmp);
}
void Print(char str[][100],int n)
{
	for(int i=1;i<=n;i++)
	printf("%s\n",str[i]);
}

int main()
{
	freopen("in.txt","r",stdin);
	int n=10;
	char str[15][100];
	
	Input(str,n);
	Sort(str,n);
	Print(str,n);
	
	return 0;
}

2国家排名

#include  <stdio.h>
#include<string.h>
#include<stdlib.h>  
#define   MAX_LEN  10
#define   N         150
void SortString(char *ptr[], int n);
main()
{
//	freopen("in.txt","r",stdin);
    int    i, n;
    char   *pStr[N];
    printf("How many countries?\n");
    scanf("%d",&n);
    printf("Input their names:\n");

    for (i=0; i<n; i++)
    {
   	 	pStr[i]=(char*)malloc(20);
        scanf("%s",pStr[i]);
    }
    SortString(pStr, n);
    printf("Sorted results:\n");
    for (i=0; i<n; i++)
    {
        puts(pStr[i]);
    }
}
 
void SortString(char *ptr[], int n)
{
    int    i, j;
    char  *temp;
    for (i=0; i<n-1; i++)
    {
        for (j = i+1; j<n; j++)
        {
            if (strcmp(ptr[i] , ptr[j])>0)
            {
                temp = ptr[i];
                ptr[i] = ptr[j];
                ptr[j] = temp;
            }
        }
    }
}

3.最长单词

#include<stdio.h>
#include<string.h>
int main()
{
//	freopen("in.txt","r",stdin);
printf("输入一行文本:\n\n");
	char s[5555];
	gets(s);
	int len=strlen(s),ans=0,cnt=0,ansl=0,ansr=0;
	for(int i=0;i<=len;i++)
	{
		if(s[i]<'a'||s[i]>'z')
		{
			if(ans<cnt)
			{
				ans=cnt;
				ansr=i-1;
				ansl=i-ans;
			}
			cnt=0;
		}
		else cnt++;
	}
	
	
	char anss[5555];
	memset(anss,0,sizeof(anss));
	for(int i=ansl;i<=ansr;i++)
		anss[i-ansl]=s[i];
	printf("最长的单词是:");
	printf("%s",anss);
}

7. 排序查找

1.固定成绩排序输出

#include<stdio.h>
#include<string.h>
#define re return
const int N=1e3+5;

int main()
{
	int n=7,rank[N];
	int vis[N];
	int score[N]={0,5,3,4,7,3,5,6};
	
	memset(rank,-1,sizeof(rank));
	memset(vis,0,sizeof(vis));
	for(int i=1;i<=n;i++)vis[score[i]]=1;
	
	int cnt=0;
	for(int i=1;i<=n;i++)
	if(vis[i])rank[i]=++cnt;
	
	printf("  Player_NO  Score  Rank\n" ); 
	for(int i=1;i<=n;i++)
	{
		printf("   %3d    %4d   %4d\n",i,score[i],rank[score[i]]);
	} 
	re 0;
}

2.swap

#include<stdio.h>
void swap(int* p1,int* p2)
{
    *p1^=*p2^=*p1^=*p2;
}
int main()
{
	int a,b,c;
	printf("please input 3 number x,y,z");
	scanf("%d,%d,%d",&a,&b,&c);
	
	if(a>b)swap(&a,&b);
	if(a>c)swap(&a,&c);
	if(b>c)swap(&b,&c);
	printf("the sorted numbers are:%d,%d,%d\n",a,b,c);
}

3.20个数从大到小


#include<stdio.h>

unsigned short ReadNumber(int num[])
{
	printf("Input Numbers:\n");
	int cnt=0;
	num[0]=0;
	while(num[cnt]!=-1)
	{
		scanf("%d",&num[++cnt]); 
	}
	 
}

void SortNumberDescending(int num[],unsigned short n)
{
	for(int i=1;i<=n-1;i++)
	{
		int k=i;
		for(int j=i+1;j<=n;j++)
		if(num[j]>num[k])k=j;
		
		if(i!=k)num[i]^=num[k]^=num[i]^=num[k];
	}
}

void SummingAveraging(int num[],unsigned short n,int *pSum,float *pAver)
{
	*pSum=*pAver=0;
	for(int i=1;i<=n;i++)*pSum+=num[i];
	*pAver=(float)*pSum/n;
}
int main()
{
	freopen("in.txt","r",stdin);
	int a[100],cnt;
	ReadNumber(a);
	for(cnt=1;a[cnt]!=-1;cnt++);
	cnt--;
	
	printf("\nSort in descending order:\n");
	SortNumberDescending(a,cnt);
	for(int i=1;i<=cnt;i++)printf("%d\n",a[i]);
	
	int sum;
	float aver;
	SummingAveraging(a,cnt,&sum,&aver);
	printf("\nSum=%d,Aver=%.2f\n",sum,aver);
	return 0;
}

4.去重

#include<stdio.h>
#include<string.h>
int main()
{
	freopen("in.txt","r",stdin);
	int vis[10005],a[105],n;
	memset(vis,0,sizeof(vis));
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
		vis[a[i]]++; 
	} 
	
	for(int i=1;i<=n;i++)
	{
		vis[a[i]]--;
		if(!vis[a[i]])printf("%d ",a[i]);

	}
	return 0;
} 

5.是否出现重复数字

#include<stdio.h>
#include<string.h>
int judge(int x);
int main()
{
	int n;
	printf("Enter a number :");
	scanf("%ld",&n);
	if(judge(n))printf("Repeated digit\n\n");
	else printf( "No Repeated digit\n\n");
	return 0;
}
int judge(int x)
{
	int vis[100];
	memset(vis,0,sizeof(vis));
	while(x)
	{
		int y=x%10;
		if(!(vis[y]))vis[y]=1;
		else return 1;
		x=x/10;
	}
	return 0;
}

6.固定整数排序从小到大(我使用了快排滴~~~)

#include<stdio.h>
#include<stdlib.h> 

int cmp(const void *a,const void *b)
{
	return(*(int *)a- *(int *)b);
}

void insert(int px[])
{
	qsort(px+1,10,sizeof(px[0]),cmp);
}

int main()
{
	int a[15];
	for(int i=1;i<=10;i++)scanf("%d",&a[i]);
	insert(a);
	for(int i=1;i<=10;i++)printf("%d ",a[i]);
	return 0;
} 

7.升序数组插入数字

#include<stdio.h>
#define inc(i,l,r) for(int i=l;i<=r;i++)
int main()
{
	int n,x,a[10005];
	printf("Input array size:\n");
	scanf("%d",&n);
	printf("Input array:\n");
	inc(i,1,n)
	{
		scanf("%d",a+i);
	}
	
	printf("Input x:\n");
	scanf("%d",&x);
	printf("After insert %d:\n",n);
	
	a[0]=-0x3f3f3f3f;
	inc(i,1,n)
	{
		if(a[i-1]<=x&&x<a[i])printf("%4d",x);
		printf("%4d",a[i]);
	}
	if(a[n]<=x)printf("%4d",x);
	return 0;
} 

8.两个数组一起升序排序(快排函数++)

#include<stdio.h>
#include<stdlib.h>
#define inc(i,l,r) for(int i=l;i<=r;i++)

int cmp(const void *a,const void *b)
{
	return (*(int *)a- *(int *)b);//从小到大 
}
#include<stdio.h>
#include<stdlib.h>
#define inc(i,l,r) for(int i=l;i<=r;i++)

int cmp(const void *a,const void *b)
{
	return (*(int *)b- *(int *)a);
}

int main()
{
	printf("Please enter scores:\n");
	int a[35];
	inc(i,1,30)scanf("%d",a+i);
	
	qsort(a+1,30,sizeof(a[0]),cmp);
	 
	printf("Sorted results:\n");
	inc(i,1,30)printf("%d\n",a[i]);
	return 0;
}
int main()
{
	int a[20]={0,9,12,23,33,78,1,5,10,27,34,39,63,94};
	inc(i,1,13)printf("%4d\n",*(a+i)); 
	qsort(a+1,13,sizeof(a[0]),cmp);
	inc(i,1,13)printf("%4d",*(a+i));

	
} 

9.30个数排序

#include<stdio.h>
#include<stdlib.h>
#define inc(i,l,r) for(int i=l;i<=r;i++)

int cmp(const void *a,const void *b)
{
	return (*(int *)b- *(int *)a);
}

int main()
{
	printf("Please enter scores:\n");
	int a[35];
	inc(i,1,30)scanf("%d",a+i);
	
	qsort(a+1,30,sizeof(a[0]),cmp);
	 
	printf("Sorted results:\n");
	inc(i,1,30)printf("%d\n",a[i]);
	return 0;
}

10卡布列克

#include<stdio.h>
#include<stdlib.h>

int cmp(const void *a,const void *b)
{
	return (*(int *)a- *(int *)b);//从小到大 
}

void Get_num(int x,int *a)
{
	for(int i=1;i<=4;i++,x/=10)
	a[i]=x%10;
	
	qsort(a+1,4,sizeof(a[0]),cmp);
}
int main()
{
	int x,cnt=0;
	printf("Enter number:");
	scanf("%d",&x);
	int a[15];
	while(x!=6174)
	{
		Get_num(x,a);
		int b=a[1]+10*(a[2]+10*(a[3]+10*a[4]));
		int c=a[4]+10*(a[3]+10*(a[2]+10*a[1]));
		x=b-c;
		printf(" [%d]:%d-%d=%d\n",++cnt,b,c,x);
	}
 } 

11.奇偶排序

#include<stdio.h>
#include<stdlib.h>
#define re return
int cmp(const void *a,const void *b)
{
	int c=*(int *)a,d=*(int *)b;
	if((c&1)&&(!(d&1)))re -1;
	else if((!(c&1))&&(d&1))re 1;
	return c-d;
}

int main()
{
	int a[15];
	printf("Input 10 numbers:\n");
	for(int i=1;i<=10;i++)scanf("%d",a+i);
	
	qsort(a+1,10,sizeof(a[0]),cmp);
	
	printf("Output: " );
	for(int i=1;i<=9;i++)
	printf("%d,",a[i]);
	
	printf("%d\n",a[10]); 
	return 0;
}

12.在十个数中顺序查找输入数的位置

#include<stdio.h>
#define re return

int Search(int *a,int n,int x)
{
	for(int i=1;i<=10;++i)
	if(x==*(a+i))re i-1;
	
	re -1;
}
int main()
{
	int a[15],x;
	printf("Input 10 numbers:\n");
	for(int i=1;i<=10;i++)scanf("%d\n",a+i);
	
	printf("Input x:\n");
	scanf("%d",&x);
	int ans=Search(a,10,x); 
	if(ans==-1)printf("Not found!\n");
	else printf("Subscript of x is %d\n",ans);
	return 0;
}

13.得到平均数,中数,众数

#include<stdio.h>
#include<stdlib.h> 

#define inc(i,l,r) for(int i=l;i<=r;i++)

int cmp(const void *a,const void *b)
{
	return (*(int *)a-*(int *)b);//从小到大 
}
int Mean(int answer[],int n)
{
	int sum=0;
	inc(i,1,n)sum+=answer[i];
	
	return sum/n;
}

int Median(int answer[],int n)
{
	if(n&1)return answer[(n>>1)+1];
	
	return (answer[n>>1]+answer[(n+1)>>1])/2;
}

int Mode(int answer[],int n)
{
	int ans=0,cnt=0,pre=-1,ansx=-1;
	inc(i,1,n)
		if(pre==answer[i])cnt++;
		else {
			//ans=ans>cnt?ans:cnt;
			if(ans<=cnt){
				ans=cnt;
				ansx=pre;
			}
			cnt=1;
			pre=answer[i];
		}
		if(ans<cnt)ansx=pre;
		return ansx;
}

void DataSort(int a[],int n)
{
	qsort(a+1,n,sizeof(a[0]),cmp);
}
int main()
{
	int a[50];
	freopen("in.txt","r",stdin);
	printf("Input the feedbacks of 40 students:\n");
	inc(i,1,40)scanf("%d",a+i);
	DataSort(a,40);
	printf("Mean value = %d\n",Mean(a,40));
	printf("Median value = %d\n",Median(a,40));
	printf("Mode value = %d\n",Mode(a,40));
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值