目录
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;
}