#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>int main()
{
int cut = 0; //定义一个变量 计算累加次数
for (int i = 1; i < 1000; i++) //千循环
{
if (i%10== 9 || i/10 ==9 || i / 100 == 9 || i % 100/10 == 9)
{ i的值对10求余得到个数i的值对10做除数得到 十位
i的值对100求余得到百位数
i的值对100求余再除以10得到白位数
printf("%d ", i);
cut++;
}
}
printf("\n一共有%d个", cut);
return 0;
}
找下标的两种方法 :
一个是循环 一个是二分查找法 前提条件 必须是排完顺序的数组
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
int arr[] = { 1,2,3,4,5,6,7,8,9 ,10 }; //数组
int t=0;
scanf("%d", &t); //输入查找的数字
int att = sizeof(arr) / sizeof(arr[0]); //求字符的个数
int find=0; 哨兵
for (int i = 0; i < att; i++) 有几个循环数字 就循环多少次
{
if (t == arr[i]) 如果输入的数字等于循环体的下标
{
printf("找到了下标是%d", i); 那么就打印出来下标 结束循环
find = 1;
break;
}
}
if (find == 0)
{
printf("没找到下标");
}
}
第二种方法是:二分查找法
所有程序比第一种方法 都要快
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>int main()
{int arr[] = {1,2,3,4,5,6,7,8,9 ,10}; 定义一个数组
int k=0; 输入一个值
int sz = sizeof(arr) / sizeof(arr[0]); 计算数组的个数
printf("请输入你要查找的数字\n");
scanf("%d", &k); 输入一个值int lef = 0; 设置最小值
int rig =sz - 1; 最大值
int find =0;
while (lef <= rig) 如果 最小值 小于等于最大值 那么就继续循环
{int mid = (rig + lef) / 2; 中间值
if (arr[mid] < k) 如果中间值小于输入的数字
{
lef= mid + 1; 中间值就会往前面进一位
}
else if (arr[mid] > k) 如果中间值大于输入的数字
{
rig = mid - 1; 中间值就会往后面退一位
}
else
{
printf("恭喜你找到了,下标是%d", mid);
find = 1;
break;
}
}
if (find == 0)
{
printf("没找到,不好意思");
}
}
函数的调用
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
#include <stdlib.h>void bianli(int arr[], int sz)
{
for (int i = 0; i < sz; i++)
{
arr[i] = -1;
}
}
void daying(int arr[], int sz)
{
for (int i = 0; i < sz; i++)
{
printf("%d\t", arr[i]);
}
}
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 }; 定义一个数组
int sz = sizeof(arr) / sizeof(arr[0]); 求数组的个数
daying(arr, sz); 引用函数
printf("\n");
bianli(arr, sz); 改变函数
daying(arr, sz); 打印函数}