结构体的sort排序
struct node{
int age;
double weight;
};
int zzx(struct node a,struct node b){
return a.age>=b.age;
return a.weight<=b.weight;
}
//如果年龄不同,按年龄降序排雷,如果年龄相同,按体重升序排列
for(int i = 18;i<28;i++){
//这里就是按顺序输入而已
arr[i-18].age = i;
arr[i-18].weight = i*1.2;
}
arr[10].age = 18;
arr[10].weight = 12;
sort(arr,arr+11;zzx);
//浮点数不能直接比大小,尤其是0,因为会有精度误差
==贪心算法 ==
MAX = 0x7fffffff;
Max = max(Max,temp);//看temp和Max谁最大,最大的值再赋给Max
//以下是全局最优解
while(n--){
int temp;
cin>>temp;
//以下是局部最优解
Min = min(Min,temp);
Min = min(Min,temp);
}
一大类用此解决的问题:
一,事件序列问题
(有开始时间,结束时间,求最长序列,做过的看电视的题目
想要整体最长,就要局部最短
空心
#include<stdio.h>
int main(){
int i,j,k;//行,列,每一行元素个数
int count;
char ch;
scanf("%d %c",&k,&ch);
if(k%2==0) count=k/2;
if(k%2!=0) count=k/2+1;//为啥奇数给它加一呢?
for(i=1;i<=count;i++){
if(i!=1&&i!=count){
for(j=1;j<=k;j++){
if(j>1&&j<k)
printf(" ");
else
printf("%c",ch);
}
}
else
for(j=1;j<=k;j++){
printf("%c",ch);
}
printf("\n");
}
}
水仙花
#include<stdio.h>
int pow(m,n){
int j,s=1;
for(j=1;j<=n;j++){
s*=m;
}
return s;
}
int main()
{
int n,m;
scanf("%d",&n);
int x = 0;
for(x = pow(10,n-1); x < (pow(10,n)); x++){
int b = x;
int sum = 0, a = 0, i;
for(i = 1; i <= n; i++){
a = b%10;
b /= 10;
sum += pow(a,n);
}
if(sum == x)
printf("%d\n",x);
}
return 0;
}
水仙花!!!
#include <stdio.h>
int narcissistic( int number );
void PrintN( int m, int n );
int main()
{
int m, n;
scanf("%d %d", &m, &n);
if ( narcissistic(m) ) printf("%d is a narcissistic number\n", m);
PrintN(m, n);
if ( narcissistic(n) ) printf("%d is a narcissistic number\n", n);
return 0;
}
int narcissistic( int number ){
int num=number;
int a,i,s,j=0;
int sum=0;
while(num!=0){
num/=10;
j++;
}
num=number;//你又忘了这步啦
while(num!=0){
a=num%10;
s=1;
for(int i=0;i<j;i++){
s*=a;
}
sum+=s;
num/=10;
}
if(sum==number) return 1;
else return 0;
}
void PrintN( int m, int n ){
for(int i=m+1;i<n;i++){//这里+1不能少的,不然你删除一下试试
if(narcissistic(i)) printf("%d\n",i);
}
}
水仙花
#include <stdio.h>
#include <math.h>
int main()
{
int n,m,a,b,c,i;
scanf("%d %d",&m,&n);
if(m<=n&&m>=100&&n<=999){
for(i=m;i<=n;i++){
a=pow(i/100,3);
b=pow(i/10%10,3);
c=pow(i%10,3);
if(i==a+b+c){
printf("%d\n",i);
}
}
}
else{
printf("Invalid Value.");
}
return 0;
}
用调用函数算费波纳序列
#include <stdio.h>
int fib( int n );
void PrintFN( int m, int n );
int main()
{
int m, n, t;
scanf("%d %d %d", &m, &n, &t);
printf("fib(%d) = %d\n", t, fib(t));
PrintFN(m, n);
return 0;
}
int fib( int n ){
if(n<=2) return 1;
else return fib(n-1)+fib(n-2);
}
void PrintFN( int m, int n ){
int i=0,count=0;
for(int j=0;j<=21;j++){//为啥是小于21?
i++;//用来找f,i每加一1都去fib函数中找一圈
int f=fib(i);//调用函数
if(f>=m&&f<=n){//找到了并且在给定范围内
if(count==0){//第一个数
printf("%d",f);
count++;
}else{//后面的数
printf(" %d",f);
count++;
}
}
}
if(count==0){//范围内没有
printf("No Fibonacci number");
}
}
小于m的最大十个素数
#include <stdio.h>//顺便复习一下函数了
int isprime(int k){//目的判断是不是素数,是就返回1,不是返回0
if(k==2)return 1;
else if(k<=1)return 0;
for(int i=2;i<k;i++)
if(k%i==0)return 0;
return 1;
}
int main(){
int a,count=0;
scanf("%d",&a);
a--;
for(;count<10;a--){
if(isprime(a)){//这里函数isprime(a)
//是把a带到上面的那个函数里,做一遍步骤之后再回来
printf(" %d",a);//也可以试试%6d,这个才是标准解
count++;
}
}
}
统计素数并求和
#include <stdio.h>
#include <math.h>
int main(){
int m,n,b,sum=0,num=0,x,i;
scanf("%d%d",&m,&n);
if (m==1){//考虑m=1,而1不是素数也不是合数的情况
m=2;
}
for(x=m;x<=n;x++){//从m开始用循环找出m至n之间的素数
b=sqrt(x);
for(i=2;i<=b;i++){//判断区间[m,n]内的某一实数x是否为素数
if(x%i==0)//如果x为素数,则跳出寻找约数的循环
break;
}
if(i>=b+1){//找不到约数,确定是素数
num=num+1;//素数个数+1
sum=sum+x;
}//素数求和
}
printf("%d %d",num,sum);
return 0;
}
输出整数各位数字
#include <stdio.h>
//思路,用字符串读一个输出一个,确实不用计算咯
int main() {
char a;
a = getchar();
while (a >= '0'&&a <= '9') {//读到非数字为止,包括回车
printf("%c ", a);//
putchar(a);
a = getchar();
}
printf("\n");
return 0;
}
字符逆序
#include<stdio.h>
int main(){
int i,k,t;
i=0;
char str[80];
while((str[i]=getchar())!='\n')
i++;
str[i]='\0';
i=i-1;
while(i>0){
printf("%c",str[i]);
i--;
}
}