谁编程最厉害
int Max2(int d[],int n)
{
int max,sum,D[20],x=0;
for(int i=0;i<n;i++){
if(d[i]%2==0){
sum++;
D[x]=d[i];
x++;
}
}
if(sum==0)return -1;
else{for(int i=0;i<x;i++){
max=D[0];
if(D[i]>max) max=D[i];
}return max;
}
}
高效查重
int fun(int n)
{
int b[n];
for(int i=0;i<n;i++){
b[i]=0;
}
for(int j=0;j<n;j++){
b[getDi(j)]++;
}
for(int k=0;k<n;k++){
if(b[k]>1){
return 1;
}
}
return 0;
}
高效查单
int Fun(int n)
{
static int j=0;
for(int i=0;i<n;i++){
j^=getDi(i);
}
return j;
}
移除指定元素
int fun (int *A,int N,int val)
{
int j=0;
for(int i=0;i<N;i++){
if(A[i]!=val){
A[j]=A[i];
j++;
}
}
return j;
}
数组去最值
int delMaxMin(int A[],int n){
int max=0,min=0;
int cnt=0;
for(int i=0;i<n;i++){
if(A[i]>=A[max])
max=i;
if(A[i]<=A[min])
min=i;
}
if(max<min){
for(int i=max+1;i<min;i++){
A[i-1]=A[i];
cnt++;
}
for(int i=min+1;i<n;i++){
A[i-2]=A[i];
cnt++;
}
}
if(max>min){
for(int i=min+1;i<max;i++){
A[i-1]=A[i];
cnt++;
}
for(int i=max+1;i<n;i++){
A[i-2]=A[i];
cnt++;
}
}
return cnt;
}
强者几何
int* fun(int *d,int N){
int *s;
s=(int *)malloc(sizeof(int)*N);
int a[101]={0};
for(int i=0;i<N;i++){
a[d[i]]++;
}
int k=0;
for(int i=0;i<N;i++){
for(int j=100;j>d[i];j--)
k+=a[j];
s[i]=k;
k=0;
}
return s;
}
反转的最大矩阵
unsigned int fun(char** D, int M, int N)
{
for (int i = 0; i < M; i++)
{
if (D[i][0] != 1)
{
for (int j = 0; j < N; j++)
{
D[i][j] = !D[i][j];
}
}
}
for (int j = 1; j < N; j++)
{
int count = 0;
for (int i = 0; i < M; i++)
{
if (D[i][j]) count++;
}
if (count < M/2)
{
for (int i = 0; i < M; i++)
{
D[i][j] = !D[i][j];
}
}
}
int num = 0;
for (int j = 0; j < N; j++)
{
int P = pow(2, N - j - 1);
for (int i = 0; i < M; i++)
{
num += D[i][j] * P;
}
}
return num;
}
摘桃几何
int fun ( int *nums,int N ){
int a[N];
int A,B;
a[0]=nums[0];
a[1]=nums[0]>nums[1]?nums[0]:nums[1];
for(int i=2;i<N;i++){
A=a[i-2]+nums[i];
B=a[i-1];
a[i]=A>B?A:B;
}
return a[N-1];
}
字符串转结构体
ST* InitData(int n){
ST *p=(ST*)malloc(sizeof(ST)*n);
for(int i=0;i<n;i++){
scanf("%s %s %d %d %lf",&p[i].name,&p[i].id,&p[i].gender,&p[i].age,&p[i].scored);
}
return p;
}
字符串高效去噪
void stringDel (char *st ){
int i=0;
int j=0;
for(i=0;st[i]!='\0';i++){
if(st[i]>='0'&&st[i]<='9')
continue;
else if(i==j){
j++;
continue;
}else{
j2i(st,j,i);
j++;
}
}
if(i!=j)
{
st[i]='\0';
j2i(st,j,i);
}else{
st[i]='\0';
}
}
int prime( int p )
{
int i,a=1;
if(p<=1)
{
return 0;
}
else if(p==2)
{return 1;}
for(i=2;i<=p/2;i++)
{
if(p%i==0)
{a--;
break;
}
}
return a;
}
void Goldbach( int n )
{
int i,count=0;
for(i=2;i<n;i++)
{
if(prime(i)==1&&prime(n-i)==1)
{count++;
if(count==1)
{
printf("%d=%d+%d",n,i,n-i);
}
}
}
}
int f( int n )
{
int a;
if(n==0)
return 0;
if(n==1)
return 1;
else
a=f(n-2)+f(n-1);
return a;
}
求n以内最大的k个素数以及它们的和
#include <stdio.h>
int main()
{
int n,k,i,j,q=0,sum=0;
scanf("%d%d",&n,&k);
i=n;
for(i;i>=2;i--)
{
int isprime =1;
for(j=2;j<i-1;j++)
{
if(i%j==0){isprime=0;break;}
}
if(isprime==1)
{
sum+=i;
if(q==0)printf("%d",i);
else printf("+%d",i);
q++;
}
if(q>=k||i==2)
{
printf("=%d",sum);
break;
}
}
return 0;
}
数组循环右移
int ArrayShift( int a[], int n, int m )
{
int b,j,i;m%=n;
for(i=0;i<m;i++)
{
b=a[n-1];
for(j=n-2;j>=0;j--)
a[j+1]=a[j];
a[0]=b;//这个和a[j+1]=b等价,可以思考下为什么。
}
}
赛程安排
int fun ( int *A,int N )
{
int i,j;
int a,c=0;
for(i=0;i<N;i+=2)
{
if(A[i]/2!=A[i+1]/2)
{
for(j=i+2;j<N;j++)
{
if(A[j]/2==A[i]/2)
{
a=A[j];
A[j]=A[i+1];
A[i+1]=a;
c++;
break;
}
}
}
}
return c;
}
链表分区
struct ListNode* partition(struct ListNode* head, int x){//双指针
if(head==NULL||head->next==NULL)
return head;
struct ListNode*p1=(struct ListNode*)malloc(sizeof(struct ListNode));//申请双指针;
struct ListNode*p2=(struct ListNode*)malloc(sizeof(struct ListNode));
struct ListNode*temp1=p1;
struct ListNode*temp2=p2;
while(head){
if(head->data<x){
temp1->next=head;
temp1=temp1->next;
}
else{
temp2->next=head;
temp2=temp2->next;
}
head=head->next;
}
temp2->next=NULL;
temp1->next=p2->next;
temp1=p1->next;
free(p1);
free(p2);
return temp1;
}