//错误总结:数组越界:单纯的想到7%4=3,但是数组下标是2,就直接减一,没想到是num%4有可能等于0,那就越界,正确的思路是在原来的数值基础上加一//Run-Time Check Failure #2 – Stack around the variable 'a' was corrupted.//出现此种错误就是数组越界#include<iostream>usingnamespace std;//判断是否为7的倍数或者包含7boolvalid(int number1){if(number1 %7==0)returnfalse;else{int i =0;while(number1){//分离数字的标准模板
i = number1 %10;if(i ==7)returnfalse;
number1 /=10;}returntrue;}}intmain(){int n, num[4]={0}, number =1;
cin >> n;for(int i =0; i < n;){if(valid(number)){ i++;}else{
num[(number-1)%4]++;}
number++;}for(int i =0; i <4; i++){
cout << num[i]<< endl;}return0;}
//使用string是真的方便.注意以下//1:这是to_string是c++11标准中的函数//2:s.find(str),当str是s的子串时,返回第一次出现的位置,否则返回string::nops;#include<iostream>#include<string>usingnamespace std;int a[4]={0};intmain(){int n;
cin >> n;int num =1;while(n){
string t=to_string(num);if(num %7==0|| t.find('7')!=t.npos){
a[(num -1)%4]++;
n++;}
num++;
n--;}for(int i =0; i <4; i++){
cout << a[i]<< endl;}return0;}