算法笔记(一)

来源:互联网 发布:淘宝虚拟商品有哪些 编辑:程序博客网 时间:2024/05/16 05:51

题目一

题目说明:对一个数做若干次交换,直到这个数只剩下一个数字,交换的规则是,将这个数变为所有位数上的数字的乘积,比如285经过一次变换之后转换成2*8*5=80,问题是,要做多少次变换,使得这个数变成个位数

输入描述:输入一个正整数,小于等于2,000,000,000

输出描述:输出一个整数,表示变换次数

输入例子:285

输出例子:2

代码如下:

#include<stdio.h>#include<stdlib.h>int w[10];int split(int num);int split(int num) {    int i = 0;    while(num) {        w[i++] = num % 10;        num = num / 10;    }    return i;   }void main() {    int num, i = 0;    int j = 0, count = 0, index = 0;    scanf("%d", &num);    while(num >= 10) {        index = split(num);        count++;        num = 1;            for(j = 0; j < index; j++) {            num = num * w[j];        }           }    printf("%d", count);    } 

题目二

给出一个区间[a, b],计算区间内神奇数的个数,神奇数的定义,存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。比如,153,可以使用数字3和数字1组成13,13是质数,满足神奇数,同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数

输入描述:输入两个整数a和b,代表[a, b]区间(i <= a <= b <= 10000)

输出描述:输出为一个整数,表示区间内满足条件的整数的个数

输入例子:11 20

输出例子:6

#include<stdio.h>#include<stdlib.h>#include<math.h>int w[5];int isPrime(int num);int quert(int num);int isneed(int index);void clear();void clear() {    int i;    for(i = 0; i < 5; i++) {        w[i] = 0;    }}int isneed(int index){    int num = 0, i, j;    int b = 1, q;    int flag = 0;    for(i = 0; i < index-1; i++) {        for(j = i + 1; j < index; j++) {            q = w[i] * 10 + w[j];            if(q >= 10 && isPrime(q) == 1) {                printf("q:  %d ", q);                flag = 1;                break;            }            q = w[j] * 10 + w[i];            if(q >= 10 && isPrime(q) == 1) {                printf("q1:  %d ", q);                flag = 1;                break;            }        }    }    return flag;}int quert(int num) {    int i = 0;    while(num) {        w[i++] = num % 10;        num = num / 10;    }    return i;   }int isPrime(int num) {    int i, flag = 0;    for(i = 2; i < sqrt(num); i++) {        if(num % i == 0) {            flag = 1;            break;        }    }    return !flag;} void main(void) {    int min, max, num, flag = 0, count = 0;    scanf("%d%d", &min, &max);    for(num = min; num <= max; num++) {        int index = quert(num);        flag = isneed(index);        clear();        if(flag == 1) {            count++;             flag = 0;        }    }    printf("count: %d\n", count);}
原创粉丝点击