65,187
社区成员




//A:与7无关的数查看
//描述
//一个正整数,如果它能被7整除,或者它的十进制表示法中某个位数上的数字为7,则称其为与7相关的数.现求所有小于等于n(n<100)的与7无关的正整数的平方和.
//输入
//输入为一行,正整数n,(n<100)
//输出
//输出小于等于n的与7无关的正整数的平方和
//样例输入
//21样例输出
//2336
#include <iostream>
using namespace std;
bool Like7(int i)
{
if(!(i%7))
return true;
if(7==i%10)
return true;
if(7==i/10)
return true;
return false;
}
int main( int argc,char** argv )
{
int iIn;
int iResult=0;
cin >> iIn;
while(iIn)
{
if(!Like7(iIn))
iResult += iIn * iIn;
--iIn;
}
cout << iResult;
}
//B:unix纪元查看
//
//描述
//在著名的unix系统中,使用了一种简洁高效的时间表示方法,即:
//将1970年1月1日0点作为“unix纪元”的原点,从1970年1月1日开始经过的秒数存储为一个32位整数
//
//请编写一个程序,帮助把一个unix时间辍,转换成形如"YYYY-mm-dd HH:ii:ss"的格式,其中的字母分别代表
//YYYY 4 位数字完整表示的年份
//mm 数字表示的月份,有前导零的 2 位数字
//dd 月份中的第几天,有前导零的2位数字
//HH 小时,24 小时格式,有前导零
//ii 有前导零的分钟数
//ss 秒数,有前导零
//
//输入
//输入数据有若干行,每行包含一个整数t,(0<=t<2^31)
//输出
//对每一行输入数据,输出一行,为形如“YYYY-mm-dd HH:ii:ss”格式的时间
//样例输入
//10
//1234567890
//样例输出
//1970-01-01 00:00:10
//2009-02-13 23:31:30
#include <iostream>
#include <sstream>
using namespace std;
enum Misc
{
sPerMin = 60,
sPerHour= sPerMin * 60,
sPerDay = sPerHour * 24,
};
int iDaysOfMonth[][13] =
{
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
int iDaysOfYear[] = {365,366};
int bLeap[] = {0,0,1,0};
bool LeapYear(int i)
{
if(0==i%100)
{
if(0==i%400)
return true;
}
else
{
if(0==i%4)
return true;
}
return false;
}
inline bool DaysLargeTheYear(int iDays,int iYear)
{
return iDays >= iDaysOfYear[LeapYear(iYear)];
}
inline bool DayslargeTheMonth(int iDays,int iMonth,int iLeap)
{
return iDays >= iDaysOfMonth[iLeap][iMonth];
}
int main()
{
int iTime;
cin >> iTime;
int iDays = iTime / sPerDay;
int iHours= iTime / sPerHour % 24;
int iMins = iTime / sPerMin % 60;
int iSeconds = iTime % 60;
int iYear=1970;
while(DaysLargeTheYear(iDays,iYear))
{
iDays -= iDaysOfYear[LeapYear(iYear)];
++iYear;
}
int iLeap = LeapYear(iYear);
int iMonth = 1;
while(DayslargeTheMonth(iDays,iMonth,iLeap))
{
iDays -= iDaysOfMonth[LeapYear(iYear)][iMonth];
++iMonth;
}
++iDays;
ostringstream buf;
buf.fill('0');
buf << iYear << "-" ;
buf.width(2);
buf << iMonth << "-";
buf.width(2);
buf<< iDays << " ";
buf.width(2);
buf << iHours << ":";
buf.width(2);
buf << iMins << ":";
buf.width(2);
buf << iSeconds ;
cout << buf.str();
}
//C:和数查看
//描述
//给定一个整数序列,判断其中有多少个数,等于数列中其他两个数的和。
//比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。
//输入
//第一行是一个整数T,表示一共有多少组数据。 1<= T <= 100
//接下来的每组数据共两行,第一行是数列中数的个数n ( 1 <= n <= 100),第二行是由n个整数组成的数列。
//
//输出
//对于每组数据,输出一个整数(占一行),就是数列中等于其他两个数之和的数的个数。
//样例输入
//2
//4
//1 2 3 4
//5
//3 5 7 9 10
//样例输出
//2
//1
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;
size_t InnerSum(vector<int>& vec)
{
sort(vec.begin(),vec.end());
size_t iResult=0;
for(size_t i=2;i<vec.size();++i)
{
for(size_t j=0;j<i;++j)
{
bool bFound=false;
for(size_t k=j+1;k<i;++k)
{
if(vec[i]==vec[j]+vec[k])
{
++iResult;
bFound = true;
break;
}
}
if(bFound)
break;
}
}
return iResult;
}
int main()
{
int iGroups;
cin >> iGroups;
vector<int> vResult;
while(iGroups--)
{
int iNums;
cin >> iNums;
vector<int> vInt;
while(iNums--)
{
int i;
cin >> i;
vInt.push_back(i);
}
vResult.push_back(InnerSum(vInt));
}
for(size_t i=0;i<vResult.size();++i)
{
cout << vResult[i] << endl;
}
}
#include <iostream>
#include <sstream>
using namespace std;
enum Misc
{
sPerMin = 60,
sPerHour= sPerMin * 60,
sPerDay = sPerHour * 24,
};
int iDaysOfMonth[][13] =
{
{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30,31}
};
int iDaysOfYear[] = {365,366};
int bLeap[] = {0,0,1,0};
bool LeapYear(int i)
{
if(0==i%100)
{
if(0==i%400)
return true;
}
else
{
if(0==i%4)
return true;
}
return false;
}
inline bool DaysLargeTheYear(int iDays,int iYear)
{
return iDays >= iDaysOfYear[LeapYear(iYear)];
}
inline bool DayslargeTheMonth(int iDays,int iMonth,int iLeap)
{
return iDays >= iDaysOfMonth[iLeap][iMonth];
}
int main()
{
int iTime;
while(cin >> iTime)
{
int iDays = iTime / sPerDay;
int iHours= iTime / sPerHour % 24;
int iMins = iTime / sPerMin % 60;
int iSeconds = iTime % 60;
int iYear=1970;
while(DaysLargeTheYear(iDays,iYear))
{
iDays -= iDaysOfYear[LeapYear(iYear)];
++iYear;
}
int iLeap = LeapYear(iYear);
int iMonth = 1;
while(DayslargeTheMonth(iDays,iMonth,iLeap))
{
iDays -= iDaysOfMonth[LeapYear(iYear)][iMonth];
++iMonth;
}
++iDays;
ostringstream buf;
buf.fill('0');
buf << iYear << "-" ;
buf.width(2);
buf << iMonth << "-";
buf.width(2);
buf<< iDays << " ";
buf.width(2);
buf << iHours << ":";
buf.width(2);
buf << iMins << ":";
buf.width(2);
buf << iSeconds ;
cout << buf.str() << endl;
}
}
//C:和数查看
//描述
//给定一个整数序列,判断其中有多少个数,等于数列中其他两个数的和。
//比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。
//输入
//第一行是一个整数T,表示一共有多少组数据。 1<= T <= 100
//接下来的每组数据共两行,第一行是数列中数的个数n ( 1 <= n <= 100),第二行是由n个整数组成的数列。
//
//输出
//对于每组数据,输出一个整数(占一行),就是数列中等于其他两个数之和的数的个数。
//样例输入
//2
//4
//1 2 3 4
//5
//3 5 7 9 10
//样例输出
//2
//1
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;
size_t InnerSum(vector<int>& vec)
{
sort(vec.begin(),vec.end());
size_t iResult=0;
for(size_t i=0;i<vec.size();++i)
{
for(size_t j=0;j<vec.size();++j)
{
if(j==i)
continue;
//bool bFound=false;
for(size_t k=j+1;k<vec.size();++k) // 因为 vec[j]+vec[k] 与 vec[k]+vec[j] 的值相等,因此限制 j < k
{
if(k==i||k==j)
continue;
if(vec[i]==vec[j]+vec[k])
{
++iResult;
//bFound = true;
//break; // 不能马上退出,因为后边的数也许会满足,如:0,0,0,0
}
}
//if(bFound)
//break;
}
}
return iResult;
}
int main()
{
int iGroups;
cin >> iGroups;
vector<int> vResult;
while(iGroups--)
{
int iNums;
cin >> iNums;
vector<int> vInt;
while(iNums--)
{
int i;
cin >> i;
vInt.push_back(i);
}
vResult.push_back(InnerSum(vInt));
}
for(size_t i=0;i<vResult.size();++i)
{
cout << vResult[i] << endl;
}
}
#include <stdio.h>
int t;
int fun(int n,bool b)
{
if (b == true)
{
t = n;
if (n % 7 == 0)
return 0;
}
if (n <= 10)
return t;
else if (n % 10 == 7)
return 0;
else
return fun(n / 10,false);
}
int main()
{
int n;
scanf("%d",&n);
int s = 0;
for (int i = 1;i <= n;++i)
{
s = s + fun(i,true) * fun(i,true);
}
printf("%d",s);
return 0;
}
//C:和数查看
//描述
//给定一个整数序列,判断其中有多少个数,等于数列中其他两个数的和。
//比如,对于数列1 2 3 4, 这个问题的答案就是2, 因为3 = 2 + 1, 4 = 1 + 3。
//输入
//第一行是一个整数T,表示一共有多少组数据。 1<= T <= 100
//接下来的每组数据共两行,第一行是数列中数的个数n ( 1 <= n <= 100),第二行是由n个整数组成的数列。
//
//输出
//对于每组数据,输出一个整数(占一行),就是数列中等于其他两个数之和的数的个数。
//样例输入
//2
//4
//1 2 3 4
//5
//3 5 7 9 10
//样例输出
//2
//1
#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>
using namespace std;
size_t InnerSum(vector<int>& vec)
{
sort(vec.begin(),vec.end());
size_t iResult=0;
for(size_t i=0;i<vec.size();++i)
{
for(size_t j=0;j<vec.size();++j)
{
if(j==i)
continue;
bool bFound=false;
for(size_t k=0;k<vec.size();++k)
{
if(k==i||k==j)
continue;
if(vec[i]==vec[j]+vec[k])
{
++iResult;
bFound = true;
break;
}
}
if(bFound)
break;
}
}
return iResult;
}
int main()
{
int iGroups;
cin >> iGroups;
vector<int> vResult;
while(iGroups--)
{
int iNums;
cin >> iNums;
vector<int> vInt;
while(iNums--)
{
int i;
cin >> i;
vInt.push_back(i);
}
vResult.push_back(InnerSum(vInt));
}
for(size_t i=0;i<vResult.size();++i)
{
cout << vResult[i] << endl;
}
}